VSCode中Oniguruma正则前瞻匹配含换行元素的替代方案求助
解决方案
VSCode的TextMate集成的Oniguruma正则默认限制了.匹配换行的能力,即便Oniguruma原生支持相关特性,也会受TextMate规则约束。你可以通过以下两种思路解决问题:
1. 用[\s\S]替代.匹配任意字符(含换行)
直接替换前瞻内的通配符,用[\s\S](匹配所有空白与非空白字符,即任意字符)代替.,即可支持换行场景。
针对你的需求,可用正则:
^(?=<element\s*(?:[\s\S]*?(?:desiredAttr1="desiredValue1"|desiredAttr2="desiredValue2")))
正则说明:
^:锚定字符串开头(?=...):正前瞻,仅当内部条件满足时匹配开头<element\s*:匹配目标标签开头,允许标签后紧跟空白(包括换行)[\s\S]*?:非贪婪匹配任意字符(含换行),避免跳过目标属性(desiredAttr1="desiredValue1"|desiredAttr2="desiredValue2"):匹配两个目标属性中的任意一个
2. 限制属性在标签内部的严谨写法
如果需要确保目标属性是在<element>标签的闭合>之前(避免匹配到标签外的内容),可以调整为:
^(?=<element\s*(?:[\s\S]*?(?:desiredAttr1="desiredValue1"|desiredAttr2="desiredValue2"))[\s\S]*?>)
这里额外添加了[\s\S]*?>,确保前瞻内容在标签闭合前结束。
内容的提问来源于stack exchange,提问作者ghaschel
相关产品推荐
相关产品推荐

