如何编写正则表达式匹配代码注释且不误匹配URL内的//字符
正则调整方案
修改后正则
你只需要给单行注释的匹配规则新增负向后顾断言,过滤掉前面紧跟冒号的//序列即可,调整后的完整正则如下:
/(\/\*([^*|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(?<!:)\/\/.*/g
核心调整逻辑
- 新增的
(?<!:)是负向后顾断言,限定仅匹配前方没有紧跟冒号:的// - URL中的
//必然跟随在http:/https:/ftp:等协议标识的冒号之后,会被该规则直接排除,不会被误识别为注释
完整测试代码
var sample = `Hello //this is a test http://google.com //second third https://test.com`; var regex = new RegExp( /(\/\*([^*|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(?<!:)\/\/.*/g ); console.log(sample.match(regex));
运行输出结果为你期望的["//this is a test", "//second"]
兼容性说明
负向后顾断言是ES2018新增语法,所有现代浏览器、Node.js 10+版本均原生支持,无需额外适配。
内容的提问来源于stack exchange,提问作者s_guha96
相关产品推荐
相关产品推荐

