如何用正则表达式在一个句子中加粗?

时间:2017-08-28 11:47:53

标签: javascript regex

我正在使用正则表达式将单词周围的双下划线替换为粗体标记。但如果我在一个句子中加了一个粗体,那么它就不起作用了。例如:

 "this should be __bold__ and __this__ also".replace(/\__([^*]+)\__/g,"<b>$1</b>");

我明白了:

 "this should be <span>bold__ and __this</span> also"

但我想得到这个:

 "this should be <span>bold</span> and <span>this</span> also"

我的正则表达式有问题。如果句子中只有一个粗体字,那么它只能起作用。

3 个答案:

答案 0 :(得分:2)

在Regex中,量词+*是“贪婪的”,这意味着它们将消耗尽可能多的与正在量化的表达式匹配的字符。您可以附加问号运算符?以将“贪婪”操作转换为延迟操作。

这将使您的表达式如下:

/\__([^*]+?)\__/g

有关详细信息,请查看http://www.regular-expressions.info/repeat.html#lazy

答案 1 :(得分:0)

您是否将双下划线替换为__this__变为<b>this</b>等粗体标签?你可以这样做,

"this should be __bold__ and __this__ also".replace(/__([^ ]+)__/g,"<b>$1</b>");

而不是[^*],您可以[^ ]排除所有空格。

答案 2 :(得分:0)

作为一个稍微不同的解决方案,试试这个正则表达式:

/__(.*?)__/g

请参阅此处的说明:https://regex101.com/r/7CVJyd/1

&#13;
&#13;
let str = "this should be __bold__ and __this__ also";
str = str.replace(/__(.*?)__/g,"<b>$1</b>");

console.log(str);
&#13;
&#13;
&#13;