2013-02-08 21 views
2

我试图使用正则表达式从元素样式中删除所有“颜色”样式,但我失败了。风格的正则表达式上的JavaScript RegEx

cursor: pointer;background-color: yellow;color: lightgray; 

的风格应该成为什么

cursor: pointer;background-color: yellow; 

这是我使用color:[^;]+;

它捕获的背景色的正则表达式,并删除部分实例后背景。

+0

请阅读[regex]标签:您应该始终精确使用您使用的工具。 – 2013-02-08 18:08:46

+0

我确实包含了正则表达式和正则表达式标签。 – C3PO 2013-02-08 18:30:40

+0

是的,但你也应该*“包含一个指定你正在使用的编程语言或工具的标签”*(见标签描述)。 – 2013-02-08 18:32:05

回答

2

这正则表达式的工作对我来说:

[\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(';'); 
+0

如果颜色不是第一个或最后一个元素(因为它将删除前导分号和尾随分号),这是个坏消息。 – 2013-02-08 18:13:07

+0

@ F.J修正了我的想法。 – 2013-02-08 18:14:00

+0

我敢肯定,可以找到一个较短的正则表达式,但来吧,为什么2 downvotes? – 2013-02-08 18:20:36

0

在解决一个小更新。

错误,解决方案只有一个小问题处理与base64输入背景图像。只是想添加正则表达式来分割样式

arr = s.match(/background-image\s*:\s*url\s*\(\s*data:image[^)]+\)?|[a-zA-Z-]+:[^;]+/gi); 

这应该给你一个包含所有元素的数组。到目前为止它的工作。