代码之家  ›  专栏  ›  技术社区  ›  mheavers

vscode find and replace-查找部分搜索表达式与条件匹配而部分不匹配的实例

  •  1
  • mheavers  · 技术社区  · 6 年前

    我想运行正则表达式来查找代码中的实例,其中声明动画持续时间: duration: 2000 用持续时间加上一个附加变量替换它们 timeScale ,例如 duration: timeScale * 2000

    我的一些代码库已经有了这个-所以我想找到 duration: 后面没有 时间尺度 .

    我知道我可以找到不存在的东西,说: ^((?!timescale).)*$

    但我该如何将它(或类似的东西)与存在的东西结合起来( 持续时间 )?

    更新

    我可以在regex测试仪中运行:

    https://regex101.com/r/vY3pY3/1

    duration: (?!timescale)

    但是如何在vscode中运行它呢?它给出了错误的说法 unrecognized flag !

    enter image description here

    3 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    6 年前

    根据您的反馈,确保设置 useRipGrep false 使用

    ^(?!.*timescale).*duration:
    

    细节

    • ^ -线路起点
    • (?!.*timescale) -一个消极的展望,当有 timescale 除换行符以外的任何0+字符后的子字符串
    • .* -除换行符以外的任何0+字符尽可能多
    • duration: -A 持续时间: 子串

    regex demo .

    注释 :从 VSCode 1.29 你需要 enable search.usePCRE2 option 在正则表达式模式中启用lookaheads。

        2
  •  2
  •   revo shanwije    6 年前

    在文件中查找 功能( CTRL + 中高音 + f )似乎使用了不同的regex口味 发现 ( CTRL + f )VSC中的功能(奇怪!)。您可能需要尝试支持lookaheads的后者。 From documentations :

    VS代码确实支持正则表达式搜索, 然而, 不支持反向引用、环视和多行匹配 . 这是因为vs代码依赖于搜索工具 ripgrep , 虽然速度非常快,但不支持这些高级regex功能。

    这种行为完全出乎意料。您也可以尝试设置:

    "search.useRipgrep": false
    

    我认为可能有用也可能不有用。

        3
  •  0
  •   Matt.G    6 年前

    尝试正则表达式: ^(?:(?!timeScale).)*(duration: \d+)$

    替换为: $1 * timeScale

    Demo

    这在visual studio代码1.22.2中有效