我需要检查用户的输入是否是有效的CSS语法(输入字符串基本上是一个CSS文件)。
它可以包含类,选择器,!important
等。
我没有开始研究它,因为我希望已经有一些正则表达式语法,所以我不必从头开始。
我尝试使用谷歌搜索,但我发现的是部分css匹配字符串,而不是验证所有可能的CSS的正则表达式。
答案 0 :(得分:7)
好的,所以我想出了一个匹配有效css样式的正则表达式。
([#.@]?[\w.:> ]+)[\s]{[\r\n]?([A-Za-z\- \r\n\t]+[:][\s]*[\w .\/()\-!]+;[\r\n]*(?:[A-Za-z\- \r\n\t]+[:][\s]*[\w .\/()\-!]+;[\r\n]*(?2)*)*)}
这里的工作示例:
请记住..在检查上面的示例链接后,您会看到此正则表达式适用于常见的基本CSS2样式,但是,要匹配与http://www.w3.org/TR/css3-syntax/#detailed-grammar相关的所有CSS3样式变体,此正则表达式需要进行一些调整......上面的正则表达式是一个起点但是..
答案 1 :(得分:1)
增加了布莱恩的答案。并添加笔记
there was an error with the (?2)
.class, .class2 {...}
.class-name, .class_name
.class {}
width: 100%;
background: url("/img.jpg");
const multi = /((?:^\s*)([\w#.@*,:\-.:>,*\s]+)\s*{(?:[\s]*)((?:[A-Za-z\- \s]+[:]\s*['"0-9\w .,\/()\-!%]+;?)*)*\s*}(?:\s*))/mi
const example = `
div.css-class-10_9::hover, .active {
width: 100%;
background: rgba(1.0,0,1,1);
background-url: url("http://img.jpg");
}
div.css-class-10_9::hover,
.active {
width: 100%;
background: rgba(1.0,0,1,1);
background-url: url("http://img.jpg");
}
html {
background: white;
}
`
let out = example.replace(multi, '')
// "
// div.css-class-... {...}
// html {...}
// "
out = out.replace(multi, '')
// "html {...}"
out = out.replace(multi, '')
// ""
您还可以添加全局以一次全部替换
const global_re = /((?:^\s*)([\w#.@*,:\-.:>,*\s]+)\s*{(?:[\s]*)((?:[A-Za-z\- \s]+[:]\s*['"0-9\w .,\/()\-!%]+;?)*)*\s*}(?:\s*))/gmi
example.replace(global_re, '');
// ""
example.replace(global_re,'$1') // group 1 all css
//
// div.css-class-...{
// width...
// rest_css...
// }
//
// ...
//
// html {
// ...
// }
类名
example.replace(global_re,'$2\n\n') // group 1 all class names
// "
// div.css-class-10_9::hover, .active
//
// div.css-class-10_9::hover,
// .active
//
// html
// "
班级主体(代替班级主体)
example.replace(global_re,'$3\n')
// "
// width: 100%;
// background: rgba(1.0,0,1,1);
// background-url: url("http://img.jpg");
//
//
// width: 100%;
// background: rgba(1.0,0,1,1);
// background-url: url("http://img.jpg");
//
//
// background: white;
//
// "
https://regex101.com/r/fK9mY3/55
(免责声明:这肯定不会验证CSS)
ex:“ ............ a {}”成真