Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex保留指定的CSS规则_Css_Regex - Fatal编程技术网

Regex保留指定的CSS规则

Regex保留指定的CSS规则,css,regex,Css,Regex,花了几个小时在这上面,做了很多搜索,但我一无所获。正在寻求正则表达式大师的帮助。我正在寻找一个正则表达式,它可以删除除我指定的以外的所有CSS样式规则。例如,以以下示例输入为例: <p style="font-size:10px">Text.</p> <p><span style="font-size:12px; text-transform:uppercase">More text</span></p> <p>

花了几个小时在这上面,做了很多搜索,但我一无所获。正在寻求正则表达式大师的帮助。我正在寻找一个正则表达式,它可以删除除我指定的以外的所有CSS样式规则。例如,以以下示例输入为例:

<p style="font-size:10px">Text.</p>
<p><span style="font-size:12px; text-transform:uppercase">More text</span></p>
<p><span style="text-decoration:line-through; text-transform:uppercase;">Even more</span></p>

换成1美元。问题在于,当我在捕获组之后添加*时,它没有捕获我想要保留的规则

我认为黑名单比白名单容易。在我深入研究之前,我会试一试

/(font-size|color):[^;]+(; |)?/g
这是我的测试:

var test = 'style="font-size:12px; color:red; background:blue; color:blue"'

// style="background:blue; "
test.replace(/(font-size|color):[^;]+(; |)?/g, '');

在你说CSS是一致的之后编辑了它。

看起来我不会得到一个白名单,所以我继续黑名单。在进一步测试后,Bill's出现了一个问题,导致它不仅与CSS匹配。因此,我提出了以下似乎效果不错的建议,主要是基于比尔的想法,所以感谢他发帖

(font-size|color):.*?(;|(?="))

如果有人提出白名单解决方案,我仍然愿意接受。

为什么要使用regex?因为我必须为项目使用第三方转换工具,而进行此类更改的唯一方法是通过regex。否则,是的,我会使用某种CSS解析器。只需通过Phantomjs或类似的方式传递中间结果。这将为这个过程增加一个额外的步骤,需要定期和经常重复。这在正则表达式中似乎完全可行,我只是不太熟悉。值得注意的是,这个第三方软件生成的CSS非常干净和一致,这往往是手动解析CSS时的问题。你是对的,黑名单将非常容易。然而,没有人知道有多少不同的CSS规则可以包括,我不想。我确实知道的是我只想留下这两个。不过,谢谢你的意见。如果我不能拿出一个像样的白名单,这可能是下一个最好的办法。我已经确认,你的正则表达式可以使用软件生成的标记,而且比我昨天提出的黑名单方法更干净。但我还是想尝试一种白名单方法。
var test = 'style="font-size:12px; color:red; background:blue; color:blue"'

// style="background:blue; "
test.replace(/(font-size|color):[^;]+(; |)?/g, '');
(font-size|color):.*?(;|(?="))