Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在正则表达式中,sub后面的第一个字符会被忽略?_Javascript_Regex_Regexp Replace - Fatal编程技术网

Javascript 为什么在正则表达式中,sub后面的第一个字符会被忽略?

Javascript 为什么在正则表达式中,sub后面的第一个字符会被忽略?,javascript,regex,regexp-replace,Javascript,Regex,Regexp Replace,这是我在Chrome78控制台中得到的 console.log('1111'。替换(/(^ |[^2])/g,$12')) //输出“21121212”方法1 我猜你是想写 (?<=^)|([^2]) 如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况 正则表达式电路 可视化正则表达式: 我认为发生的情况是,在替换零宽度匹配后,在搜索下一个匹配之前,它会将输入字符串中的位置增加1。否则,它将陷入无限循环,不断匹配和替换相

这是我在Chrome78控制台中得到的

console.log('1111'。替换(/(^ |[^2])/g,$12'))
//输出“21121212”
方法1 我猜你是想写

(?<=^)|([^2])

如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况


正则表达式电路 可视化正则表达式:


我认为发生的情况是,在替换零宽度匹配后,在搜索下一个匹配之前,它会将输入字符串中的位置增加1。否则,它将陷入无限循环,不断匹配和替换相同的零宽度字符串


由于
^
在开始处匹配零宽度字符串,因此它会增加位置,在查找下一个匹配之前跳过字符串的第一个字符。

您希望得到什么结果
$1
是对捕获的匹配的引用。我认为期望的输出是
2121212
@YongQuan是的,我也这么认为,但我测试了操作代码,事实上输出是
21121212
。已知的问题是JS regex在零长度匹配后跳过当前位置,请参阅链接线程,详细解释根本原因。如果从PCRE切换到ECMAScript,演示将无法运行。遗憾的是,ECMAScript不支持查找
(?<=^|[^2])
(?=^|[^2]|$)