正则表达式加粗字符使用*

时间:2015-07-02 16:41:24

标签: javascript regex

如果我有这样的文字:

I need to bold *this* text and *that* text.

我需要加粗这个文字和那个文字。

我需要将它们都转换为<b>this</b><b>that</b>

var str = $('textarea#commentfield').val();
var getBold = str.match(/\*.+\*/g);
if(getBold!=null){
  getBold = getBold.toString().replace(/\*/g,"");
}
str = str.replace(/\*[^*]+?\*/g, "<b>"+getBold+"<\/b>");

这不是我想要的2场或更多场比赛。它正在这样做:

我需要加粗此文字及文字和此文字及文字。

2 个答案:

答案 0 :(得分:5)

您可以使用捕获组和组参考号:

str =str.replace(/\*([^*]+)\*/g, "<b>$1<\/b>");

答案 1 :(得分:2)

在更换每颗星时,只需使用闭包来跟踪标签状态:

&#13;
&#13;
function embolden(str) {
  var open = false;
  var ret = str.replace(/\*/g, function() {
    if (open) {
      open = false;
      return '</b>';
    } else {
      open = true;
      return '<b>';
    }
  });
  if (open) {
    ret += '</b>';
  }
  return ret;
}


var input = 'I need to bold *this* text and *that* text.';
document.getElementById('r').innerHTML = embolden(input);
&#13;
<pre id=r></pre>
&#13;
&#13;
&#13;

这可以节省任何奇怪的转义规则,并且可以通过在返回之前检查状态来轻松避免不平衡标记。