2017-08-28 65 views
0

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

"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" 

有什么毛病我的正则表达式。目前只有在句子中有单个粗体字的情况下才有效。

+1

又是怎么回事'这应该__bold__和__th_is__也是'?我认为你需要'.replace(/ __([\ s \ S] *?)__/g,“$ 1”)' –

+0

如果你遇到了用下划线标记的麻烦,为什么不去额外的步骤,只是直接使用标签? –

+0

@TimBiegeleisen我有一种感觉,他正在尝试做一个降价模拟器或沿着这条线。 – Nicholas

回答

2

在正则表达式中,量词+*是“贪婪的”,这意味着它们将消耗尽可能多的符合量化表达式的字符。您可以附加问号运算符?将“贪婪”操作变成懒惰操作。

这将使你的表达如下:

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

欲了解更多信息,请查阅http://www.regular-expressions.info/repeat.html#lazy

0

你更换双下划线加粗标签,如__this__变得<b>this</b>?你可以这样做,

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

相反的[^*],你做[^ ]排除所有空格。

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);

相关问题