如果我有这样的文字:
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场或更多场比赛。它正在这样做:
我需要加粗此文字及文字和此文字及文字。
答案 0 :(得分:5)
您可以使用捕获组和组参考号:
str =str.replace(/\*([^*]+)\*/g, "<b>$1<\/b>");
答案 1 :(得分:2)
在更换每颗星时,只需使用闭包来跟踪标签状态:
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;
这可以节省任何奇怪的转义规则,并且可以通过在返回之前检查状态来轻松避免不平衡标记。