匹配行尾双斜杠注释的正则表达式需求(忽略引号内内容)
匹配行尾双斜杠注释(忽略引号内内容)的正则方案
针对双引号场景的正则
^(?:[^"]|"[^"]*")*?(//.*)$
原正则失效原因
你之前用的.*(//.*)是贪婪匹配,会从行首一直匹配到最后一个//的位置——哪怕这个//在引号里也会被错误命中,完全没处理引号边界的逻辑。
正则逻辑拆解
^:锚定行起始位置,确保从行头开始匹配(?:[^"]|"[^"]*")*?:非捕获组,专门跳过引号内的内容:[^"]:匹配任何非双引号的字符"[^"]*":匹配一对双引号包裹的完整内容(包含里面的所有非引号字符)*?:非贪婪量词,让这个组尽可能少匹配,保证遇到第一个行尾的//就停止
(//.*):捕获组,精准捕获行尾的双斜杠注释(包含双斜杠本身及后续所有内容)
扩展:支持单双引号的版本
如果需要同时忽略单引号和双引号内的//,可以用这个正则:
^(?:[^"']|(["'])[^"']*\1)*?(//.*)$
测试验证
用你提供的测试文本:
something something // match this and the double slash this address: "https://foo" but don't match this this has 'http://bar' // another valid comment
匹配结果:
- 第一行捕获组内容:
// match this and the double slash - 第二行:无匹配(
//在双引号内) - 第三行捕获组内容:
// another valid comment
内容的提问来源于stack exchange,提问作者see sharper
相关产品推荐
相关产品推荐

