Javascript (?=)没有';工作,我只是改变了它的位置

Javascript (?=)没有';工作,我只是改变了它的位置,javascript,regex,Javascript,Regex,我的正则表达式没有正确执行 当我改变它的位置时,我会得到不同的结果 “bbbWindows”不是我想要的。为什么不是“bbb2222” 'Windowsbbb'.replace(/Windows(?=bbb)/, '2222') // 2222bbb 当断言的模式位于匹配模式之后时,应使用正向查找: 'bbbWindows'.replace(/(?<=bbb)Windows/, '2222') 替换(/(?Lookaheads((?=…))是零长度断言。它们断言原始字符串中该位置后面的

我的正则表达式没有正确执行

当我改变它的位置时,我会得到不同的结果

“bbbWindows”不是我想要的。为什么不是“bbb2222”

'Windowsbbb'.replace(/Windows(?=bbb)/, '2222') // 2222bbb

当断言的模式位于匹配模式之后时,应使用正向查找:

'bbbWindows'.replace(/(?<=bbb)Windows/, '2222')
替换(/(?Lookaheads(
(?=…)
)是零长度断言。它们断言原始字符串中该位置后面的子字符串必须与给定模式匹配。换句话说

/Windows(?=bbb)/
仅当紧跟在
s
之后的子字符串也与模式
bbb
匹配时,才会匹配子字符串
Windows

/(?=bbb)Windows/
仅当紧随初始匹配开始位置的子字符串也与模式
bbb
匹配时,才会匹配子字符串
Windows
-这是不可能的,没有字符串会匹配该模式

使此模式工作的最简单方法是使用常规的“串联”组(
(…)
),并调整替换字符串以将此匹配的子字符串插入适当的位置(
$N
)。例如:

console.log('windowsbb'.replace(/Windows(bbb)/,'2222$1')///222bbb

console.log('bbbWindows.replace(/(bbb)Windows/,'$12222'))//bbb2222
?=是一个正向的前瞻,它不捕获任何内容。JavaScript中不支持lookbehind。
/(?=bbb)Windows/