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これは明らかに無効です.nullをmatch返しているからです

またはnull、長さをチェックする前にチェックを実行して、正規表現の照合を 1 回だけ実行することもできます。

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

テキストに「http://」一致がない場合、「linkify」は null になるため、その条件をテストする必要があります。

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