Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于样式的JavaScript正则表达式_Javascript_Regex - Fatal编程技术网

关于样式的JavaScript正则表达式

关于样式的JavaScript正则表达式,javascript,regex,Javascript,Regex,我试图使用正则表达式从元素样式中删除所有“颜色”样式,但我失败得很惨 样式示例 cursor: pointer;background-color: yellow;color: lightgray; 样式应成为什么样的示例 cursor: pointer;background-color: yellow; 这是我正在使用的正则表达式color:[^;]+ 它捕获背景色并删除背景后的零件 这个正则表达式适用于我: [\s;]color:[^;]+(?=;)|^color:[^;]+; 您将看到

我试图使用正则表达式从元素样式中删除所有“颜色”样式,但我失败得很惨

样式示例

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(';');

关于解决方案的一点更新

dystroy,解决方案只有一个小问题,就是如何处理base64输入的背景图像。只是想添加用于拆分样式的正则表达式

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

这将为您提供一个包含所有元素的数组。到目前为止,它是有效的

请阅读[regex]标记:您应该始终精确地使用工具。我确实包含了regex和regularexpression标记。是的,但您还应该“包含一个指定您正在使用的编程语言或工具的标记”(请参见标记说明)。完成。我认为无论你使用什么编程语言,正则表达式都是标准的。不,有一些风格和一些高级功能在javascript中是不可用的。如果颜色不是第一个或最后一个元素(因为它将删除前导和尾随分号),这是个坏消息。我肯定可以找到一个较短的正则表达式,但是来吧,为什么是2张反对票?+1,对于反对票,我怀疑你在想“CSS不应该用RegExp解析”,你错了。CSS是一种非常简单的正则语言,这意味着正则表达式是解析它的一个很好的选择。我投了反对票,因为原来的正则表达式被破坏了,现在它被修复了。谢谢你整洁的代码。遗憾的是,没有一种方法可以用“替换为首先拆分样式”来完成