首页 > 解决方案 > 正则表达式不会在新行上回溯

问题描述

我试图检测不正确(过度)的代码

foo {
  bar {
      baz {

使用正则表达式,我发现了一个有趣的行为。

我正在使用的正则表达式/^( *).+\n\1 {3,}/在 VS Code(标准查找和替换对话框)中会触发所有内容的误报。同时在 JavaScript (Chrome 74) 中没有这样的行为。

更严格的正则表达式/^( *)\S.+\n\1 {3,}/可以正常工作,但我想知道为什么存在差异?是在 JavaScript 中换行后不回溯(这是我的疯狂猜测)还是 VS Code 是否专门处理空白字符,例如默认情况下不贪婪地匹配它们?

PS:IE 的工作方式与 Chrome 相同。

标签: javascriptregexvisual-studio-codenewlinebacktracking

解决方案


好的,似乎 VSCode 运行带有 flags 的正则表达式im。没有m标志,^只匹配字符串的开头——而不是任何新行的开头。

而且 BTW JS 不支持 \A 和 \Z 锚点


推荐阅读