为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2019-03-05 21:15:30
我本来这样写的:var s = "var a = 'test'; // 1234678"s.replace(/\/\/[\s\S]*?\n?$/,'');后来发现,代码中还有这样的代码:var a = '://'+host;// 123456var s = "  //  tset "; // testvar a = 'http://www.a.com//b/c';所以好复杂啊,不知道这正则该怎么写了==
查看完整描述

4 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-03-28
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

自己写了这样的代码,目前是能解决已经想到的代码匹配了,肯定还有坑


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


查看完整回答
反对 回复 2019-03-28
?
白板的微信

TA贡献1883条经验 获得超3个赞

要写出适用所有情况的正则是不可能的,正则表达式不能解决类似括号、引号匹配的问题,而如果要解决你的问题,又要适用所有情况,包括一行内故意写了多个字符串等情况,不做语法分析是不可能的,但你仍然可以用正则解决部分问题,一些特殊的情况是可以解决的,可以试试断言什么的


查看完整回答
反对 回复 2019-03-28
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

做了很多尝试,看看这个。


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; 

  });

}


查看完整回答
反对 回复 2019-03-28
  • 4 回答
  • 0 关注
  • 636 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信