3

我正在尝试制作一个像 Stack Overflow 一样的降价编辑器。

如果我实际上没有在文本区域中键入星号和包含 http:// 的短语,则会在标题中列出此错误。如果我只键入一个包含星号的短语,则错误指的是这一行:if(linkify.length!==0)

这是一个jsfiddle向您展示我的意思。

这是我的 HTML:

<textarea></textarea>
<div></div><button type="button">Markdownify</button>

这是我的 JS:

var val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

$(document.body).on('click', 'button', function() {

val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

if (boldify.length!== 0){
            for (var i=0; i < boldify.length; i++)  {
                var boldMatch= boldify[i],  
                boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, '<span style="font-weight:bold;color:blue;">'+boldMatch+'</span>'),
                val = val.replace(boldMatch, boldReplace);     
            }
        val = val.replace(/\*\*/gi, "");
}

if(italicify.length!== 0){
    for(var j=0; j < italicify.length; j++){
    var italicMatch= italicify[j],
     italicReplace = italicMatch.replace(/\*[A-z0-9]+\*/gim, '<span style="font-style:italic;color:red;">'+italicMatch+'</span>');
    val = val.replace(italicMatch, italicReplace); 
    }
    val = val.replace(/\*/gi, "");
}

if(linkify.length!== 0){
    for(var k=0; k < linkify.length; k++){
    var linkMatch= linkify[k],
    linkReplace = linkMatch.replace(/http:\/\/[A-z0-9]+\.[A-z0-9]+/gim, '<a href="'+linkMatch+'">'+linkMatch+'</a>');
        val = val.replace(linkMatch, linkReplace);
    }
}

$('div').html(val);
});

任何帮助将不胜感激。

4

2 回答 2

10

match如果字符串与提供的正则表达式不匹配,则不要使用返回 null 的函数,而是使用test返回 true/false 的函数,然后如果需要,可以使用该match函数。

基本上你正在执行null.length这显然是无效的,因为match它返回你一个 null

或者您可以在null检查长度之前执行检查,然后只进行一次正则表达式匹配。

if(linkify!==null && linkify.length!== 0)
{
  //do smthing
}
于 2012-04-17T00:46:06.303 回答
3

当文本中没有“http://”匹配时,“linkify”为空,因此您需要测试该条件:

if(linkify && linkify.length)
于 2012-04-17T00:46:07.030 回答