我试图使用正则表达式从元素样式中删除所有“颜色”样式,但我失败了。风格的正则表达式上的JavaScript RegEx
例
cursor: pointer;background-color: yellow;color: lightgray;
的风格应该成为什么
cursor: pointer;background-color: yellow;
这是我使用color:[^;]+;
它捕获的背景色的正则表达式,并删除部分实例后背景。
我试图使用正则表达式从元素样式中删除所有“颜色”样式,但我失败了。风格的正则表达式上的JavaScript RegEx
例
cursor: pointer;background-color: yellow;color: lightgray;
的风格应该成为什么
cursor: pointer;background-color: yellow;
这是我使用color:[^;]+;
它捕获的背景色的正则表达式,并删除部分实例后背景。
这正则表达式的工作对我来说:
[\s;]color:[^;]+(?=;)|^color:[^;]+;
你会看到它以不同方式处理,其中颜色是第一个参数的情况。
var style = "cursor: pointer;background-color: yellow;color: lightgray;";
var replaced = style.replace(/[\s;]color:[^;]+(?=;)|^color:[^;]+;/g, '')
需要注意的是,即使使用正则表达式并不坏在这里,此操作可能会用一个简单的拆分+过滤更大的信心来完成:
var replaced = style.split(';').filter(function(v){
return v.split(':')[0].trim()!='color'
}).join(';');
如果颜色不是第一个或最后一个元素(因为它将删除前导分号和尾随分号),这是个坏消息。 – 2013-02-08 18:13:07
@ F.J修正了我的想法。 – 2013-02-08 18:14:00
我敢肯定,可以找到一个较短的正则表达式,但来吧,为什么2 downvotes? – 2013-02-08 18:20:36
在解决一个小更新。
错误,解决方案只有一个小问题处理与base64输入背景图像。只是想添加正则表达式来分割样式
arr = s.match(/background-image\s*:\s*url\s*\(\s*data:image[^)]+\)?|[a-zA-Z-]+:[^;]+/gi);
这应该给你一个包含所有元素的数组。到目前为止它的工作。
请阅读[regex]标签:您应该始终精确使用您使用的工具。 – 2013-02-08 18:08:46
我确实包含了正则表达式和正则表达式标签。 – C3PO 2013-02-08 18:30:40
是的,但你也应该*“包含一个指定你正在使用的编程语言或工具的标签”*(见标签描述)。 – 2013-02-08 18:32:05