2

我正在尝试使用正则表达式从元素样式中删除所有“颜色”样式,但我失败了。

样式示例

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

样式应成为的示例

cursor: pointer;background-color: yellow;

这是我正在使用的正则表达式color:[^;]+;

它捕获背景颜色并删除背景后的部分。

4

2 回答 2

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(';');
于 2013-02-08T18:10:21.760 回答
0

关于解决方案的一点更新。

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

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

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

于 2013-02-20T23:42:51.787 回答