类型:Bug
重现步骤
- 创建新文件并填写以下内容。
child: asdf; asdf
}
- 按Cmd+Shift+H,打开正则表达式选项(Cmd+Option+R),将查找文本填入
child: (\w+);(?=[\S\s\n]*?\})
,替换文本填入$1
。 - 查看预览或执行替换操作。
预期行为
child: asdf
应该被替换为 asdf
。
实际行为
child: asdf
被替换为 $1
。
附加信息
正常单文件替换按预期工作。
如果匹配项中没有换行符,它也按预期工作。
VS Code版本:Code - Insiders 1.75.0-insider ( b229eb5 , 2023-01-27T22:17:24.641Z)
操作系统版本:Darwin x64 22.1.0
模式:
沙箱:是
系统信息
| 项目 | 值 |
| ------------ | ------------ |
| CPUs | Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (6 x 3000) |
| GPU状态 | 2d_canvas: enabledcanvas_oop_rasterization: disabled_offdirect_rendering_display_compositor: disabled_off_okgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onopengl: enabled_onrasterization: enabledraw_draw: disabled_off_okskia_renderer: enabled_onvideo_decode: enabledvideo_encode: enabledvulkan: disabled_offwebgl: enabledwebgl2: enabledwebgpu: disabled_off |
| 负载(平均) | 2, 2, 6 |
| 内存(系统) | 24.00GB (0.02GB free) |
| 进程参数 | |
| 屏幕阅读器 | no |
| VM | 0% |扩展名:无A/B实验
5条答案
按热度按时间y3bcpkx11#
我在这里放一个注解。
问题
对于我来说,正则表达式匹配组替换在Unicode字符上不起作用。
用$X($0 $1, $2, $3 ...)替换匹配组失败。
经过测试,我删除了
"This is a test-",
这一行,现在它甚至在文件中找不到匹配项,尽管"കണ്ടന്നുമുതൽ തൻ-",
仍然存在。解决方案
但后来我从这里学到,尽管
\w
匹配Unicode字符,但最好使用\p{L}
。编辑:
它仍然无法匹配每个Unicode字母。
我尝试通过一个没有空格的
-
捕获每个Unicode字母。nqwrtyyt2#
在您的案例中,您可能需要在匹配
\n
之前转义\
,如下所示:F:
\\n
如果您必须将
child: asdf
替换为asdf
,那么为什么还要使用正则表达式呢?您可以直接这样做:F:
child: asdf;
R:
asdf;
qlckcl4x3#
这是一个简化的报告示例。我不记得原始用例,但这并不重要。因为
asdf
可以是任何东西,所以我不得不使用正则表达式。nmpmafwu4#
但是后来我从这里学到,尽管\w匹配Unicode字符,但最好使用\p{L}。
我注意到
\p{L}
仅在PCRE中使用语法,但打开文件应该使用JS引擎处理正则表达式(https://github.com/microsoft/vscode/wiki/Search-Issues#notes-on-regular-expression-support)。话虽如此,你可能需要寻找一种同时适用于两种引擎且干净的方法,遗憾的是yyhrrdl85#
我找到了一个更简单的复现方法:
在单文件查找和替换中,将正则表达式
\s
替换为 `` ,文件中的换行符不会发生变化。