VS Code中正则匹配lenevo开头分号结尾内容失效如何解决
匹配失败原因
VS Code 基于JavaScript正则引擎实现搜索匹配,默认规则下通配符.不会匹配换行符(\n、\r)。原正则lenevo.*?;中的.*?仅能匹配同一行内的连续字符,遇到换行就会终止匹配,无法抓取跨多行的目标文本段。Notepad的正则搜索默认开启「点号匹配换行」配置,因此原写法在Notepad中可以正常工作。
可用调整方案
任选以下一种正则写法即可在VS Code中实现预期匹配效果:
- 方案1:使用兼容跨行的字符集替代单独的
.,正则写为:lenevo[\s\S]*?;
其中[\s\S]可以匹配所有空白字符与非空白字符,等价于覆盖包含换行在内的任意字符,搭配非贪婪限定符*?会匹配到距离起始lenevo最近的分号就停止,不会出现过度匹配的问题。 - 方案2:通过模式修饰符开启dotAll(单行)模式,正则写为:
(?s)lenevo.*?;
开头的(?s)是正则内联修饰符,作用是让当前匹配规则下的.支持匹配换行符,效果和Notepad++中开启点号匹配换行完全一致。
效果验证
针对提供的测试文本:
lenevo hello demo one example;
两种调整后的正则都可以准确匹配从lenevo hello起始、到example;结尾的完整跨多行文本段,符合预期需求。
内容的提问来源于stack exchange,提问作者Mausam Sinha
相关产品推荐
相关产品推荐

