如何结合负向远后瞻与正向后瞻正则匹配非注释内的:this
解决方法
要匹配不在/* */注释块内的:this行,你需要先跳过所有注释块,再捕获目标模式。之前的负向后瞻尝试失败是因为它仅检查了紧邻的字符,无法识别完整的注释块范围。
正确的正则表达式方案
使用交替模式的正则表达式:先匹配并跳过所有注释块,同时捕获符合要求的:this实例,最后过滤掉注释相关的匹配结果。
代码示例
const str = ` :this { display: grid; } p { color: red} :this { this is also okay to capture } /* but do not capture this :this { } , so how to look far behind here */ `; // 匹配注释块 或 捕获目标模式 const pattern = /\/\*[\s\S]*?\*\/|((?<=:)\bthis\b\s*(?={))/gmd; const matches = [...str.matchAll(pattern)] .map(match => match[1]) // 提取捕获组内容 .filter(Boolean); // 过滤掉注释对应的null结果 console.log(matches); // 输出: ["this ", "this "]
正则说明
\/\*[\s\S]*?\*\/: 匹配所有单行或多行注释块,[\s\S]*?非贪婪地匹配任意字符(包括换行)直到遇到闭合的*/。((?<=:)\bthis\b\s*(?={)): 捕获目标模式——冒号后的独立单词this,以及{前的任意空白字符,和你最初的需求一致。- 通过
filter(Boolean)筛选出有效捕获结果,排除注释块的匹配。
内容的提问来源于stack exchange,提问作者xkeshav
相关产品推荐
相关产品推荐

