VSCode正则表达式子匹配评估而不是连接?

12
Test 300
Test 301
Test 302
我可以使用正则表达式查找来遍历这些内容:
Test (3[0-9]*)
当我尝试用数学函数替换时,它会连接字符串而不是计算结果?
Test $1-100

所以,它变成了:

Test 300-100

能否评估而不是连接,以便变为:

Test 200

谢谢。


1
匹配 $1 是一个字符串,如果要进行数学运算,需要将它们转换为数字。 - Tushar
2
在任何正则表达式语言中都不可能实现。 - Wiktor Stribiżew
1
它在vim正则表达式中有效:%s@{fileID: (213[0-9]*)@='{fileID: '.(submatch(1)-1900)@ - Rakka Rage
%s@Test (3[0-9])@='Test '.(submatch(1)-100)@ %s@Test (3[0-9])@='Test '.(submatch(1)-100)@ - Rakka Rage
https://github.com/Microsoft/vscode/issues/2902 - Rakka Rage
显示剩余3条评论
3个回答

8
您可以使用VS Code Super Replace 扩展来实现此操作。 查找字段是正则表达式。 替换是替换表达式。使用$$index语法的子匹配将通过处理函数字段中的函数进行解析。
以下是用于回答您问题的示例: Super Replace VS Code demo

1
现在有更多的扩展程序可以做到这一点,包括我编写的一个查找和转换

通过这个快捷键:

{
  "key": "alt+m",                     // whatever keybinding you want
  "command": "findInCurrentFile",
  "args": {
    "find": "(?<=Test\\s)(3\\d\\d)",  // get 300+ in capture group 1
    "replace": "$${ return $1 - 100 }",      // subtract 100 from capture group 1
    "isRegex": true
  }
}

evaluate math on a capture group


0

你可以使用扩展正则表达式文本生成器

  • 使用多光标选择数字
  • 执行命令:基于正则表达式(regex)生成文本
  • 对于原始regex,请使用:(.*)
  • 对于生成器regex,请使用:{{=N[1]-100}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接