我正在使用正则表达式将单词周围的双下划线替换为粗体标记。但如果我在一个句子中加了一个粗体,那么它就不起作用了。例如:
"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"
我的正则表达式有问题。如果句子中只有一个粗体字,那么它只能起作用。
答案 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
let str = "this should be __bold__ and __this__ also";
str = str.replace(/__(.*?)__/g,"<b>$1</b>");
console.log(str);
&#13;