【发布时间】:2010-08-09 11:46:16
【问题描述】:
作为在 JavaScript 中学习 RegEx 的练习,我一直在尝试在 CSS 样式表中选择属性的值。给定以下 CSS:
foo {
color: rgb(0, 0, 0) !important;
background-color: rgb(0, 0, 0) !important;
border-left: 1px solid #111;
}
还有一个函数getStyle(css, attribute) 使得getStyle(css, 'background-color') 返回"rgb(0, 0, 0)",我想出了以下代码:
function getStyle(css, attribute) {
var pattern = new RegExp(attribute + ':\\s+([^!;]+)');
return pattern.exec(css);
}
这非常接近:匹配到! 或;,以先到者为准。但是在getStyle(css, 'color')的情况下,它也会返回rgb(0, 0, 0)之后和!important之前的空格:
color = "rgb(0, 0, 0) "
background-color = "rgb(0, 0, 0) "
border-left = "1px solid #111"
我尝试过attribute + ':\\s+([^\\s+!;]+)' 之类的方法,但由于值中有空格,最终只返回rgb(0,。我还能够使用不同的正则表达式获得预期的输出并查看后面,但 JavaScript 不支持它们。
我也想过也许我可以指出类似 match while \\s+! or \\s+.+; is not true:也就是说,一旦在特定字符之前找到空格,就停止匹配,但我不确定如何在正则表达式中键入它。
我可以在第二步中轻松去除空格,但我想知道:有没有办法在一个 RegEx 中获得预期的输出?
【问题讨论】:
标签: javascript regex