javascript - js正则不支持持后瞻的问题
PHP中文网
PHP中文网 2017-04-11 10:28:29
[JavaScript讨论组]

正则中有:(?<=exp)正向后瞻(文章http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html)

但是js语言不支持,有什么替代方案么?

例如:

<p style="background:#f00;color:rgba(0,0,0,.2)">
    <span style="background-color:rgb(0,0,0,1);border-color:#0cc;color:#aaa;">demo</span>
    <span style='color:rgb(0,0,0,1)'>demo</span>
</p>

需求:匹配所有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前面总会带着一个分号";","'"等等。

有什么好的办法解决吗?

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
伊谢尔伦
var ptrn = /['";](color:[a-zA-Z0-9(),.#]{1,})[;'"]/ig;
var match; 
while((match = ptrn.exec(html)) != null ){console.log(match[1])}
ringa_lee

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

PHP中文网
var colors = [];
html.replace(/[^-](color:[^"';]+)/gi, function(m, c) {
  colors.push(c);
  return m;
});

console.log(colors);

@xi_yu 的方法也不错,或者用替换来收集值也很方便。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号