我一直试图解决这个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保持完整。
非常感谢!
快乐前锋
答案 0 :(得分:0)
修复它的一种快速而肮脏的方法是将正则表达式更改为
/(?:^|\s+)\/\/.*$/
即。仅在行的开头或至少一个空格后匹配。
这意味着类似
body {//foo bar
不会被视为评论,但
body { //foo bar
会是。
答案 1 :(得分:0)
这个怎么样
line.replace(/\/\/ .*/, '')
将替换'//'之后的所有内容,只要您的注释总是在斜杠之间有空格即可。由于urls之间没有空格//这应该可以正常工作
答案 2 :(得分:0)
我认为这不可能一步到位。 用暂时不存在的东西替换有问题的部分怎么样? :)
line
.replace(/:\/\//g, '\\')
.replace(/\s*?\/\/.*/, '')
.replace(/\\/g, '://');