我本来这样写的:
var s = "var a = 'test'; // 1234678"
s.replace(/\/\/[\s\S]*?\n?$/,'');
后来发现,代码中还有这样的代码:
var a = '://'+host;// 123456
var s = " // tset "; // test
var a = 'http://www.a.com//b/c';
所以好复杂啊,不知道这正则该怎么写了==
我本来这样写的:
var s = "var a = 'test'; // 1234678"
s.replace(/\/\/[\s\S]*?\n?$/,'');
后来发现,代码中还有这样的代码:
var a = '://'+host;// 123456
var s = " // tset "; // test
var a = 'http://www.a.com//b/c';
所以好复杂啊,不知道这正则该怎么写了==
自己写了这样的代码,目前是能解决已经想到的代码匹配了,肯定还有坑
str.replace(/[\x20\S]*\/\/[\x20\S]*?\n?$/gm, function(v) {
if (/^\x20*\/\/|^\x20*\/\//.test(v)) { return '' }
if (/[,;]\x20*\/\//.test(v)) { return v.replace(/([,;])\x20*\/\/[\x20\S]*?\n?$/m, '$1') }
return v
})
后来又发现了这样的代码:
{
a:"aa",
b:"bb"//目标字段名
}
wtf
要写出适用所有情况的正则是不可能的,正则表达式不能解决类似括号、引号匹配的问题,而如果要解决你的问题,又要适用所有情况,包括一行内故意写了多个字符串等情况,不做语法分析是不可能的,但你仍然可以用正则解决部分问题,一些特殊的情况是可以解决的,可以试试断言什么的
做了很多尝试,看看这个。
removeComment(`' : //'+host;// 123456`); // ' : //'+host;
function removeComment(str) {
const reg = /("([^\\\"]*(\\.)?)*")|('([^\\\']*(\\.)?)*')|(\/{2,}.*?(\r|\n|$))|(\/\*(\n|.)*?\*\/)/g;
return str.replace(reg, function(s) {
return /^\/{2,}/.test(s) || /^\/\*/.test(s) ? "" : s;
});
}
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
JS的正则不支持
(?'xx')
和(?-‘xx’)
感觉不太好表示状态,所以自己解析代码吧