【问题标题】:RegularExpression does not backtrack on new line正则表达式不会在新行上回溯
【发布时间】:2019-08-13 10:44:46
【问题描述】:

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

foo {
  bar {
      baz {

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

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

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

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

【问题讨论】:

  • 我无法重现,请描述您如何测试正则表达式并发布您测试正则表达式所针对的 字符串文字 - 目前尚不清楚之前是否有任何 CR 字符LF。
  • Doesn't work in regex101。我添加了一个\r? 以防万一,但没有它就没有区别。在网站上尝试了所有口味的正则表达式。我没有要检查的 VS Code。
  • @VLAZ 在 regex101.com 上添加 \r? 没有意义:它不允许在测试字符串中使用 CR 字符。所有换行符都只存在于 LF 那里。
  • @WiktorStribiżew 啊,我不知道。谢谢。
  • @VLAZ 在该站点上使用 m 标志与 JS 和 VSCode 中的方式相同

标签: javascript regex visual-studio-code newline backtracking


【解决方案1】:

好的,看起来 VSCode 运行带有标志 im 的正则表达式。如果没有 m 标志,^ 只会匹配字符串的开头,而不是任何新行的开头。

顺便说一句JS doesn't support \A and \Z anchors;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多