我有一个正则表达式,我正用来尝试从getComputedStyle
对象中获取一些值。我希望exec
在每次从索引1开始的迭代中针对它运行时,都可以找到我的匹配项,但是在每次迭代中,都会向其中添加两个新元素,myArray
并且之前未设置的元素现在未定义。
var styleAsDashedStr = window.getComputedStyle(document.getElementById("container")).cssText;
var styleRe = /(?:;\s?(background.*?)\:\s?(.*?);)|(?:;\s?(font.*?)\:\s?(.*?);)|(?:;\s?(border.*?)\:\s?(.*?);)|(?:;\s?(margin.*?)\:\s?(.*?);)|(?:;\s?(padding.*?)\:\s?(.*?);)/g;
//var individuallySetStyles = styleAsDashedStr.match(styleRe);
var myArray;
while ((myArray = styleRe.exec(styleAsDashedStr)) !== null) {
console.log(myArray);
}
第一次迭代
0: "; background-blend-mode: normal;"
1: "background-blend-mode"
2: "normal"
3: undefined
4: undefined
5: undefined
6: undefined
7: undefined
8: undefined
9: undefined
10: undefined
随后的迭代定义了两个元素,而其他八个则没有。有没有一种方法可以获取其中当前捕获的元素一和元素二的数组?
您可以累积一个对象来保存找到的规则:
var myArray, rules = {};
while ((myArray = styleRe.exec(styleAsDashedStr)) !== null) {
console.log(myArray);
if (myArray[1] && myArray[2])
rules[myArray[1]] = myArray[2];
}
这样,您最终将得到一个包含所有匹配属性的对象。
您也可以简化您的正则表达式(就像我在编辑时Barmar给出的答案一样:)。
编辑-使用图案的一个问题是,你的“节”作为开始和结束了;
。当您匹配某项内容时,匹配项将同时包含开始的分号和其后的分号。下一个匹配项将在匹配的分号之后开始,因此需要前导分号的模式部分将失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句