js正则不支持持后瞻的问题

2016-04-24 04:17:30javascript, 正则表达式问题

正则中有:(?<=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 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 jsoncode 2016-5-22 7:29 回复:xi_yu
    你这个里面的小括号是不是被转义了?

  • xi_yu xi_yu 2016-5-22 7:36 回复:xi_yu

    中括号里面的(就是括号,不会有特殊的含义


  • xiaoyao9184 xiaoyao9184 2016-4-24 8:31 回复:

    HTML啊,color无非就是" ' ;开头,[;'"]...匹配出来再replace或substring掉就可以了

    • jsoncode jsoncode 2016-4-24 9:06 回复:xiaoyao9184
      再replace必然导致效率降低,有没有更优方案?

    • xiaoyao9184 xiaoyao9184 2016-4-25 11:42 回复:xiaoyao9184

      别用regex效率就高了

    • jsoncode jsoncode 2016-5-22 7:18 回复:xiaoyao9184
      因为匹配结果很多,再遍历一遍效率极低

    • jsoncode 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 的方法也不错,或者用替换来收集值也很方便。