0

簡単な質問ですが、2 つのアスタリスクを太字に変換したいマークダウン HTML コンテンツがいくつかあります。

私が得ているエラーは次のとおりです。

ここにjsfiddleがあります:http://jsfiddle.net/fz5ZT/9/

HTMLは次のとおりです。

<div class="comments">comment 1** is good**</div>
<div class="comments">comment 2**is bad**</div>

ここにJSがあります:

function markdown(markdownable){

  var boldMatch = markdownable.match(/\*\*[A-Za-z0-9]+\*\*/gim), 
  boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, '<span style="font-  weight:bold;color:blue;">'+boldMatch+'</span>'),                   
  markdownable = markdownable.replace(boldMatch, boldReplace),    
  markdownable = markdownable.replace(/\*\*/gi, "");

  return markdownable;
}

$('.comments').each(function(){  
   var markdownable=$(this).html(), comments=markdown(markdownable);
});

もしあなたが助けてくれるなら、私はそれを大いに感謝します.

ありがとう、ティム

更新ありがとう!実際のデモについては、これを参照してください: http://jsfiddle.net/fz5ZT/30/

4

5 に答える 5

6
markdownable = markdownable.replace( /\*\*(.+?)\*\*/gm, '<strong>$1</strong>' );

ただし、中途半端で善意の、失敗する運命にある車輪の再発明の試みを実行する代わりに、既存の JavaScript Markdown ライブラリを使用してみませんか?

編集:これは、(Markdownのように)「開く」の直後または「閉じる」の前に空白がないことを要求する、より堅牢な正規表現です。

var bold = /\*\*(\S(.*?\S)?)\*\*/gm;
markdownable = markdownable.replace( bold, '<strong>$1</strong>' );
于 2012-04-19T17:19:50.577 に答える
2

最初の正規表現の一致は、文字列の空白を無視することです。許可された文字セットにスペースを追加する必要があります[ a-z0-9]; A-Zのためにあなたは必要ありませんi

また、配列を返すため、返された文字列にアクセスするにはmatch、最初の一致を取得する必要があります。boldMatch[0]

于 2012-04-19T17:16:44.900 に答える
1

次のソリューションをご覧ください。

jQueryを使用してテキスト文字列を検索しますか?

非常に似たようなことをする必要があると思います:

  $('*:contains("I am a simple string")').each(function(){
 if($(this).children().length < 1) 
      $(this).html( 
           $(this).text().replace(
                /"I am a simple string"/
                ,'<span containsStringImLookingFor="true">"I am a simple string"   </span>' 
           )  
       ) 
});

要素を太字にするには、置換が行われた後に addClass() を使用する必要があります。

ありがとう

于 2012-04-19T17:22:01.810 に答える
1
function markdown(markdownable) {

    var boldMatch = markdownable.match(/[\*]{2}( .+)?[\*]{2}/gim);
    if (boldMatch && (boldMatch = boldMatch[0])) {
        var boldReplace = boldMatch.replace(/[\*]{2}( .+)+?[\*]{2}/gim, '<span style="font-weight:bold;color:blue;">' + boldMatch + '</span>');
        markdownable = markdownable.replace(boldMatch, boldReplace);
        markdownable = markdownable.replace(/\*\*/gi, "");
    }
    return markdownable;
}

$('.comments').each(function() {

    var markdownable = $(this).html(),
        comments = markdown(markdownable);

    console.log(comments);
});​

これは決して最善の解決策ではありません...しかし、それはあなたの試みの「修正」です。うまくいけば、どこで間違ったのかについて何かを学ぶことができます。

于 2012-04-19T17:24:41.347 に答える
1

.replace() を boldMatch で呼び出す必要はありません。処理する値があることがわかるまで、つまり、一致する値がない場合です。

より安全なコンピューティング:

var boldMatch = markdownable.match(/\*\*[A-Za-z0-9]+\*\*/gim);
if (boldMatch) { 
  var boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, '<span style="font- weight:bold;color:blue;">'+boldMatch+'</span>');
}

アップデート:

このコード行により、何が起こっているのかを追跡することも難しくなります。

var markdownable=$(this).html(), comments=markdown(markdownable);

var を使用して 1 行で 2 つの変数を宣言することは、一般的に嫌われます。より良い:

var markdownable=$(this).html();
if (markdownable) {
    comments=markdown(markdownable);
}
于 2012-04-19T17:19:01.743 に答える