我一直在尝试解决这个正则表达式一段时间了,但我没有找到解决方案。
问题如下:我写了一个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, '://');