2017-02-13 71 views
0

我一直在试图解决这个RegExp一段时间,但我没有找到解决方案。JavaScript RegExp:匹配注释但不匹配网址

问题如下: 我写了一个CSS预处理器,这增加了正常使用//风格的评论的能力。该脚本遍历样式表的每一行。

这是正则表达式是用来随时随地删除评论中的行:

line.replace(/\s{0,}\/\/\s{0,}.*?$/, '') 

在这样的情况下,它完美的作品:

// body tag 
body { 
    background-color:red; // it has a red background 
} 

body { 
    background-color:red; 
} 

和结果

但是,当有一个URL目前它失败:

body { 
    background-image:url("http://somewhere.com"); 
} 

和结果:

body { 
    background-image:url("http: 
} 

请通过添加小细节于RegExp我还没有能够找到使URL保持整个帮助我。

非常感谢!

快乐前锋

+0

尝试做'\ S {0,} [^:] \/\/\ s {0,} * $'... –

+0

感谢您的快速响应?不幸的是,我已经测试过这个,并且不适用于这种情况。编辑:对不起,它的工作原理,但它会导致另一个问题,因为它不再匹配评论像'//“描述”'(包括“)。 –

+0

不工作如何,因为它在做什么? –

回答

0

一个快速和肮脏的方式来解决它是正则表达式改为

/(?:^|\s+)\/\/.*$/ 

即仅在该行的开头或至少一个空格后匹配。

这意味着像

body {//foo bar 

不会被识别为注释,但

body { //foo bar 

会。

0

这个怎么样

line.replace(/\/\/ .*/, '') 

,将取代一切后“//”,所以只要您的评论总是有斜线之间的空间它会工作。由于urls之间没有空格//这应该工作正常

0

我不认为这是可能的一步。 如何用不可能暂时存在的问题替换有问题的部分? :)

line 
.replace(/:\/\//g, '\\') 
.replace(/\s*?\/\/.*/, '') 
.replace(/\\/g, '://');