我想运行一个正则表达式来在我的代码中找到声明动画持续时间的实例: duration: 2000
并将其替换为该持续时间,再加上一个变量timeScale
,例如duration: timeScale * 2000
我的某些代码库已经具有此功能-因此,我想查找duration:
之后没有的所有timeScale
实例。
我知道我可以通过说^((?!timescale).)*$
但是我如何将它(或类似的东西)与存在的事物(duration:
)结合起来?
更新:
我实际上可以在正则表达式测试器中运行它:
https://regex101.com/r/vY3pY3/1
duration: (?!timescale)
但是如何在VSCode中运行它?出现错误,提示unrecognized flag !
答案 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
这在Visual Studio Code 1.22.2中有效