JavaScript RegExp:匹配注释但不匹配URL

时间:2017-02-13 23:06:01

标签: javascript regex

我一直试图解决这个RegExp一段时间,但我找不到解决方案。

问题如下: 我写了一个CSS预处理器,它增加了使用普通的//样式注释的能力。该脚本遍历样式表的每一行。

这是RegExp用于删除行中任何位置的注释:

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保持完整。

非常感谢!

快乐前锋

3 个答案:

答案 0 :(得分:0)

修复它的一种快速而肮脏的方法是将正则表达式更改为

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

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

这意味着类似

body {//foo bar

不会被视为评论,但

body { //foo bar

会是。

答案 1 :(得分:0)

这个怎么样

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

将替换'//'之后的所有内容,只要您的注释总是在斜杠之间有空格即可。由于urls之间没有空格//这应该可以正常工作

答案 2 :(得分:0)

我认为这不可能一步到位。 用暂时不存在的东西替换有问题的部分怎么样? :)

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