VSCode 正则表达式在文件中查找/替换:无法获得编号的捕获组后跟数字来计算

Cai*_*ard 2 regex visual-studio-code find-replace

我需要更换这个:

fixed variable 123
Run Code Online (Sandbox Code Playgroud)

有了这个:

fixed variable 234
Run Code Online (Sandbox Code Playgroud)

在 VSCode 中,这匹配得很好:

fixed(.*)123
Run Code Online (Sandbox Code Playgroud)

如果一个数字如下,我找不到任何方法让它把捕获放在输出中:

fixed$1234 

fixed${1}234
Run Code Online (Sandbox Code Playgroud)

但是查找替换窗口看起来像这样:

在此处输入图片说明

我读到 VSCode 使用铁锈味的雷克斯 ..这里表示${1}234应该可以工作,但 VSCode 只是将它放在输出中..

根据此处的样式尝试命名捕获

fixed(?P<n>.*)123     //"invalid regular expression" error
Run Code Online (Sandbox Code Playgroud)

VSCode 似乎不明白${1}在此处输入图片说明


ps; 我很感激我可以在人为的例子中破解它

FIND: fixed (.*) 123
REPL: fixed $1 234
Run Code Online (Sandbox Code Playgroud)

这在 vscode 中确实有效:

在此处输入图片说明

但并非我的所有数据在数字之前都具有相同的字符

Mar*_*ark 5

经过我自己和@Wiktor 的大量调查,我们发现了解决 vscode 搜索(也就是跨文件查找)中这个明显错误的解决方法,并在特定情况下替换功能,其中替换将具有单个捕获组,后跟数字,例如

$1234其目的是用捕获组 1后跟或 任何数字替换。但是是实际不需要的替换输出。$1234$1234

[这适用于当前文件的查找/替换小部件,但不适用于跨文件的查找/搜索。]

有(至少)两种解决方法。使用两个连续的组,就像$1$2234$1$`234一样正常工作(或在 $backtick 之前)。

因此,您可以创建一个假捕获组,(.*?)()(\d{3})因为捕获组 2 中没有任何内容,只是为了在替换中获得 2 个连续的捕获组或

使用您的初始搜索正则表达式(.*?)(\d{3}),然后在您的“真实”捕获组 $1 之前或之后使用 $`。

OP 已提交问题https://github.com/microsoft/vscode/issues/102221


奇怪的是,我刚刚发现用一个数字替换 like$11工作正常,但是一旦添加两个或更多它就会失败,所以$112失败了。