正则中有:(?<=exp)正向后瞻(文章http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html)
但是js语言不支持,有什么替代方案么?
例如:
<div>
<span>demo</span>
<span style='color:rgb(0,0,0,1)'>demo</span>
</div>
需求:匹配所有color:*,不匹配*color:*
我这么写的:
html.match(/[^(\w+\-)*]color:[\s\S]*?(?=;|"|')/gi);
//[";color:#fff", ";color:#fff", ";color:rgba(0,0,0,.2)", ";color:#aaa", "'color:rgb(0,0,0,1)"]
但是color前面总会带着一个分号";","'"等等。
有什么好的办法解决吗?
网友回答:
xi_yu 2016-4-24 10:10 回复:
已被采纳
var ptrn = /['";](color:[a-zA-Z0-9(),.#]{1,})[;'"]/ig;
var match;
while((match = ptrn.exec(html)) != null ){console.log(match[1])}
-
jsoncode 2016-5-22 7:29 回复:xi_yu
你这个里面的小括号是不是被转义了? -
xi_yu 2016-5-22 7:36 回复:xi_yu
中括号里面的(就是括号,不会有特殊的含义
-
xiaoyao9184 2016-4-24 8:31 回复:
HTML啊,color无非就是" ' ;开头,[;'"]...匹配出来再replace或substring掉就可以了
-
jsoncode 2016-4-24 9:06 回复:xiaoyao9184
再replace必然导致效率降低,有没有更优方案? -
xiaoyao9184 2016-4-25 11:42 回复:xiaoyao9184
别用regex效率就高了
-
jsoncode 2016-5-22 7:18 回复:xiaoyao9184
因为匹配结果很多,再遍历一遍效率极低 -
jsoncode 2016-5-22 7:26 回复:xiaoyao9184
不用这个用那个??
-
楼教主 2016-5-22 11:25 回复:
var colors = [];
html.replace(/^-/gi, function(m, c) {
colors.push(c);
return m;
});
console.log(colors);
@xi_yu 的方法也不错,或者用替换来收集值也很方便。