将缺失的选择器添加到无效 CSS 的正则表达式

Regex to add missing selectors to invalid CSS

我正在尝试像这样转换无效 CSS:

{color:red}

并像这样使其有效:

.missing_selector{color:red}

示例CSS:

a {
color:black;
background-color:blue;
}

{color:red}
<!-- TEST -->

@media screen and (max-width:620px) {
/* TEST 2 */
a.test {color:blue;}
p[class="test2"] {color:green;}
}

我当前的正则表达式:

/([^a-z0-9\)\];\-_]*\{)/i

现场测试:

http://www.phpliveregex.com/p/eMq

解决方案

你需要使用这个:

/(?<=\A|\})(\s*)\{/m

替换为:

.missing-selector {

(?<=\A|\}) 确保 { 之前的唯一内容(空格除外)是字符串的开头或结尾 }。 (感谢 Casimir et Hippolyte 指出那里的问题。)

Here's a regex101 demo.

为什么你的尝试失败了

这个

/([^a-z0-9\)\];\-_]*\{)/i

并没有按照你的想法去做。

  • ( 开始捕获组
  • [^a-z0-9\)\];\-_] 需要 a-z0-9)];- 以外的字符, 或 _
  • * 零次或多次
  • \{ 需要 {
  • )结束捕获组

但它没有 ^,因此它不依赖于行的开头,也不验证 { 之前的任何内容(这应该只是行的开头字符串、空格或 })。因此,它将匹配样本中包含一系列空格或其他非字母数字字符(不包括 )];-_)的所有位置 CSS:

See this regex101 demo for a fuller explanation and example matches.