如果其他单词后没有单词,则使用JavaScript正则表达式(替换)

如果其他单词后没有单词,则使用JavaScript正则表达式(替换),javascript,regex,string,Javascript,Regex,String,假设我有以下字符串: b(hello world)b 现在,我想将b(转换为b(),但仅限于在没有添加的情况下。这是我目前得到的结果: var string = "abc b(yolo)b cba"; string.replace("b\((?!<b>)", "b(<b>"); var string=“abc b(YLO)b cba”; 字符串。替换为(“b\(?!)”、“b(”); 不幸的是,我以前从未使用过Regex语句,所以我不知道我在做什么,而且它不起

假设我有以下字符串:

b(hello world)b
现在,我想将
b(
转换为
b(
),但仅限于在没有添加
的情况下。这是我目前得到的结果:

var string = "abc b(yolo)b cba";   
string.replace("b\((?!<b>)", "b(<b>");
var string=“abc b(YLO)b cba”;
字符串。替换为(“b\(?!)”、“b(”);
不幸的是,我以前从未使用过Regex语句,所以我不知道我在做什么,而且它不起作用

因此,如果您理解我的问题,请提供答案,并解释您是如何寻找一个
b(
,后面没有
),因为这是这里的主要困难。

尝试以下方法:

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

您的思路是正确的,但是字符串在javascript中不是有效的正则表达式,而负前瞻是
?!
而不是
!?

编辑-您的后续问题

您需要一个负的lookback来首先检查
是否在
)b
之前。Javascript正则表达式引擎不支持lookback,但您可以通过回调来实现这一点:

string.replace(/(<\/b>)?\)b/g, (m, c) => c ? m : `</b>${m}`)
string.replace(/()?\)b/g,(m,c)=>c?m:`${m}`)
或者如果不支持es6

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

你想把
)b作为结束标记吗?稍后,是的。但是如果我知道如何管理b(我可以自己做另一个…@4castle啊,是的,thx。但是仍然不起作用。谢谢,它起作用了:)[用字符串替换sting:P]:)这就是我在没有测试的情况下发布的内容,为什么这个东西不起作用?:D
。替换(/(?!)\)b/g,“)b”);