JavaScript RegExp:匹配评论,但不匹配URL



我一直在尝试解决这个正则表达式一段时间了,但我没有找到解决方案。

问题如下:我写了一个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:
}

请帮助我,将一些细节添加到我无法找到的正则表达式中,以便 URL 保持完整。

谢谢!

快乐前锋

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

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

即仅在行首或至少一个空格之后匹配。

这意味着类似

body {//foo bar

不会被识别为评论,但

body { //foo bar

将。

这个

怎么样

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

这将替换"//"之后的所有内容,因此只要您的注释在斜杠之间始终有一个空格,它就可以工作。由于 url 在//之间没有空格,这应该可以正常工作

我认为

这不可能一步到位。用生产线中暂时不存在的东西替换有问题的部件怎么样?:)

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

最新更新