(?=)没用,我只是改变位置

时间:2019-03-22 02:53:38

标签: javascript regex

我的正则表达式执行不正确。

改变位置会得到不同的结果。

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

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

2 个答案:

答案 0 :(得分:1)

先行者((?=...))是零长度的断言。他们断言,原始字符串中该位置之后的子字符串必须与给定的模式匹配。换句话说,

/Windows(?=bbb)/

仅当紧跟在Windows之后的子字符串也匹配模式s时,才会匹配子字符串bbb。另一方面,

/(?=bbb)Windows/

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

使此模式起作用的最简单方法是使用常规的“行内”组((...))并调整替换字符串,以将该匹配的子字符串插入适当的位置({{1} }。例如:

$N

答案 1 :(得分:0)

当断言的模式位于匹配模式的后面时,您应使用正向后视:

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