我的正则表达式执行不正确。
改变位置会得到不同的结果。
“ bbbWindows”不是我想要的。为什么不使用“ bbb2222”?
'Windowsbbb'.replace(/Windows(?=bbb)/, '2222') // 2222bbb
'bbbWindows'.replace(/(?=bbb)Windows/, '2222') // bbbWindows
答案 0 :(得分:1)
先行者((?=...)
)是零长度的断言。他们断言,原始字符串中该位置之后的子字符串必须与给定的模式匹配。换句话说,
/Windows(?=bbb)/
仅当紧跟在Windows
之后的子字符串也匹配模式s
时,才会匹配子字符串bbb
。另一方面,
/(?=bbb)Windows/
仅当紧随初始匹配开始位置的子字符串也匹配模式Windows
时,才会匹配子字符串bbb
-这是不可能的,没有字符串会匹配该子字符串。
使此模式起作用的最简单方法是使用常规的“行内”组((...)
)并调整替换字符串,以将该匹配的子字符串插入适当的位置({{1} }。例如:
$N
答案 1 :(得分:0)
当断言的模式位于匹配模式的后面时,您应使用正向后视:
'bbbWindows'.replace(/(?<=bbb)Windows/, '2222')