在 VSCode 中,您无法在匹配/捕获中替换为递增值。您只能在作为替换参数传递给正则表达式替换函数/方法的回调函数内执行此操作。
安装Python脚本插件后,您可以使用Notepad++来执行这些替换。 按照这些说明进行操作,然后使用以下 Python 代码:
def increment_after_openparen(match):
return "{0}{1}".format(match.group(1),str(int(match.group(2))+2000))
editor.rereplace(r'(transform="translate\(\d+,\s*)(\d+)', increment_after_openparen)
请参阅 正则表达式演示。
注:
(transform="translate\(\d+,\s*)(\d+)
匹配并捕获到第 1 组 transform="translate(
+ 1 个或多个数字,然后是 ,
和 0 个或多个空格(使用 (transform="translate\(\d+,\s*))
),然后将任何一个或多个数字捕获到第 2 组(使用 (\d+)
) )match.group(1)
是第 1 组内容,match.group(2)
是第 2 组内容。基本上,任何组都是由一对未转义的括号组成的,并且组计数从 1 开始。因此,如果您使用像
(Item:\s*)(\d+)([.;])
这样的模式,则需要使用 return "{0}{1}{2}".format(match.group(1),str(int(match.group(2))+2000), match.group(3))
。或者,return "{}{}{}".format(match.group(1),str(int(match.group(2))+2000), match.group(3))
。
我编写了一个扩展,查找和转换,使查找和替换正则表达式的数学运算变得非常简单(更像路径变量、条件、字符串操作等)。在这种情况下,这个键绑定(在您的
keybindings.json
中)将执行您想要的操作:
{
"key": "alt+r", // whatever keybinding you want
"command": "findInCurrentFile",
"args": {
"find": "(?<=translate\\(\\d+,\\s*)(\\d+)", // double-escaped
"replace": "$${ return $1 + 2000 }$$",
"isRegex": true,
// "restrictFind": "document", // or line/once/selections/etc.
}
}
如果您愿意,这也可以是您的
settings.json
中的设置 - 请参阅自述文件。
(?<=translate\\(\\d+,\\s*)
积极的lookbehind,您可以在lookbehind中使用非固定长度的项目,例如\\d+
。
(\\d+)
捕获组 1
替换:
$${ return $1 + 2000 }$$
$${ <your string or math operation here> }}$
return $1 + 2000
添加 2000 到捕获组 1
演示:
SublimeText3 与 Text-Pastry 插件也可以做 \i
您可以使用我制作的扩展:Regex Text Generator
Alt+Enter
来完成Match Expression
使用:(\d+)
{{=N[1]+2000}}
Enter
,或按 Esc
中止您可以在设置中将此类搜索替换设置为预定义
regexTextGen.predefined
"regexTextGen.predefined": {
"Add/Subtract a number" : {
"originalTextRegex": "(\d+)",
"generatorRegex": "{{=N[1]+1}}"
}
}
如果您选择预定义,则可以编辑表达式(更改
1
)。