js正则怎么删除单行注释?

我本来这样写的:


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';

所以好复杂啊,不知道这正则该怎么写了==


千万里不及你
浏览 637回答 4
4回答

拉莫斯之舞

JS的正则不支持(?'xx') 和 (?-‘xx’) 感觉不太好表示状态,所以自己解析代码吧

凤凰求蛊

自己写了这样的代码,目前是能解决已经想到的代码匹配了,肯定还有坑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;   });}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript