VSCode查找和替换-查找实例,其中搜索表达式的一部分与条件匹配,而一部分与条件不匹配

时间:2018-06-22 12:58:11

标签: javascript regex replace visual-studio-code

我想运行一个正则表达式来在我的代码中找到声明动画持续时间的实例: duration: 2000并将其替换为该持续时间,再加上一个变量timeScale,例如duration: timeScale * 2000

我的某些代码库已经具有此功能-因此,我想查找duration:之后没有的所有timeScale实例。

我知道我可以通过说^((?!timescale).)*$

找到不存在的东西。

但是我如何将它(或类似的东西)与存在的事物(duration:)结合起来?

更新:

我实际上可以在正则表达式测试器中运行它:

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

duration: (?!timescale)

但是如何在VSCode中运行它?出现错误,提示unrecognized flag !

enter image description here

3 个答案:

答案 0 :(得分:2)

查找文件功能( CTRL + ALT + F )似乎在其中使用了不同的正则表达式与VSC(Weird!)中的 Find CTRL + F )功能形成对比。您可能要尝试使用支持先行的后者。 From documentations

  

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

此行为完全是意外的。您也可以尝试设置:

"search.useRipgrep": false

我认为可能有效或无效

答案 1 :(得分:1)

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

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

详细信息

  • ^-行首
  • (?!.*timescale)-负前行,当除换行符以外的任何0+字符后有timescale个子字符串时,匹配失败。
  • .*-尽可能多的0+字符(换行符除外)
  • duration:-一个duration:子字符串

请参见regex demo

注意:从VSCode 1.29开始,您需要enable search.usePCRE2 option才能在正则表达式模式中启用先行。

答案 2 :(得分:0)

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

替换为:$1 * timeScale

Demo

这在Visual Studio Code 1.22.2中有效