在忽略(但保留)某个字符时运行正则表达式替换

时间:2014-11-07 18:55:07

标签: javascript regex

我认为通过一些例子可以更容易地解释这一点......

"*X*helXlo** my \\X world" => "<b>*X*helXlo**</b> my \\X world"
"**helXlo** my \\X world"  => "<b>hello</b> my \\X world"

那就是我想要像

这样的东西
str.replace(/(X)?\*(X)?\*(.*)\*(X)?\*(X)?/g, "<b>$1*$2*$3*$4*$5</b>");

但理想情况下不那么难看(看起来更像自然replace(/(\*\*.*\*\*)/g, "<b>$1</b>"))。这可能吗?

1 个答案:

答案 0 :(得分:2)

如果我理解你的要求,你绝对不需要所有这些团体。你可以这样做:

str.replace(/X?\*X?\*.*\*X?\*X?/g, "<b>$&</b>")

它基本上是相同的模式,只是没有组。 $&表示整个匹配的子字符串。

或者,您可以将其写为:

str.replace(/(X?\*){2}.*(\*X?){2}/g, "<b>$&</b>")