鍍金池/ 問答/Java  HTML/ js正則怎么刪除單行注釋?

js正則怎么刪除單行注釋?

我本來這樣寫的:

var s = "var a = 'test'; // 1234678"
s.replace(/\/\/[\s\S]*?\n?$/,'');

后來發(fā)現(xiàn),代碼中還有這樣的代碼:

var a = '://'+host;// 123456
var s = "  //  tset "; // test
var a = 'http://www.a.com//b/c';

所以好復(fù)雜啊,不知道這正則該怎么寫了==

回答
編輯回答
亮瞎她

JS的正則不支持(?'xx')(?-‘xx’) 感覺不太好表示狀態(tài),所以自己解析代碼吧

2017年2月7日 10:01
編輯回答
艷骨

做了很多嘗試,看看這個。

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; 
  });
}
2017年12月9日 21:51
編輯回答
眼雜

自己寫了這樣的代碼,目前是能解決已經(jīng)想到的代碼匹配了,肯定還有坑

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
    })

后來又發(fā)現(xiàn)了這樣的代碼:

{
    a:"aa",
    b:"bb"http://目標(biāo)字段名
}

wtf

2017年10月24日 11:06
編輯回答
舊時光

要寫出適用所有情況的正則是不可能的,正則表達(dá)式不能解決類似括號、引號匹配的問題,而如果要解決你的問題,又要適用所有情況,包括一行內(nèi)故意寫了多個字符串等情況,不做語法分析是不可能的,但你仍然可以用正則解決部分問題,一些特殊的情況是可以解決的,可以試試斷言什么的

2017年2月12日 01:02