将缺失的选择器添加到无效 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
现场测试:
解决方案
你需要使用这个:
/(?<=\A|\})(\s*)\{/m
替换为:
.missing-selector {
(?<=\A|\})
确保 {
之前的唯一内容(空格除外)是字符串的开头或结尾 }
。 (感谢 Casimir et Hippolyte 指出那里的问题。)
为什么你的尝试失败了
这个
/([^a-z0-9\)\];\-_]*\{)/i
并没有按照你的想法去做。
(
开始捕获组
[^a-z0-9\)\];\-_]
需要 a-z
、0-9
、)
、]
、;
、-
以外的字符, 或 _
*
零次或多次
\{
需要 {
)
结束捕获组
但它没有 ^
,因此它不依赖于行的开头,也不验证 {
之前的任何内容(这应该只是行的开头字符串、空格或 }
)。因此,它将匹配样本中包含一系列空格或其他非字母数字字符(不包括 )];-_
)的所有位置 CSS:
See this regex101 demo for a fuller explanation and example matches.
我正在尝试像这样转换无效 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
现场测试:
解决方案
你需要使用这个:
/(?<=\A|\})(\s*)\{/m
替换为:
.missing-selector {
(?<=\A|\})
确保 {
之前的唯一内容(空格除外)是字符串的开头或结尾 }
。 (感谢 Casimir et Hippolyte 指出那里的问题。)
为什么你的尝试失败了
这个
/([^a-z0-9\)\];\-_]*\{)/i
并没有按照你的想法去做。
(
开始捕获组[^a-z0-9\)\];\-_]
需要a-z
、0-9
、)
、]
、;
、-
以外的字符, 或_
*
零次或多次\{
需要{
)
结束捕获组
但它没有 ^
,因此它不依赖于行的开头,也不验证 {
之前的任何内容(这应该只是行的开头字符串、空格或 }
)。因此,它将匹配样本中包含一系列空格或其他非字母数字字符(不包括 )];-_
)的所有位置 CSS:
See this regex101 demo for a fuller explanation and example matches.