如果在其他单词

时间:2016-11-04 23:00:21

标签: javascript regex string

想象一下,我有以下字符串:

b(hello world)b

现在我想将b(转换为b(<b>,但仅限于已添加<b>的情况。这是我到目前为止所得到的:

var string = "abc b(yolo)b cba";   
string.replace("b\((?!<b>)", "b(<b>");

不幸的是我之前从未使用过Regex语句,所以我不知道自己在做什么,而且它不起作用......

所以,如果你理解我的问题,请提供答案,也许可以解释你是如何寻找一个b(未跟随<b>的人,因为这是主要的困难。

1 个答案:

答案 0 :(得分:3)

试试这个:

string.replace(/b\((?!<b>)/g, 'b(<b>')

你是在正确的轨道上,但字符串不是javascript中的有效正则表达式,否定前瞻是?!而不是!?

修改 - 您的后续问题

首先要检查</b>是否在)b之前,你需要一个负面的观察。 Javascript正则表达式引擎不支持lookbehind,但您可以通过回调实现此目的:

string.replace(/(<\/b>)?\)b/g, (m, c) => c ? m : `</b>${m}`)

或者如果不支持es6

string.replace(/(<\/b>)?\)b/g, function (m, c) {
 return c ? m : '</b>' + m
})