RegExp括号没有捕获

时间:2014-01-29 10:07:30

标签: javascript regex

我开始乱用javascript并且遇到正则表达式问题。 我有一个字符串......

var example = "top:50px;right:50px;bottom:50px;left:50px;"

我想从字符串中提取'50px'部分。 我用这段代码试了一下......

var theMatch = example.match(new RegExp('[a-zA-Z]+:([0-9]+px);'));

提取50px部分,但仅限于字符串中搜索值的第一次出现。我尝试了'g'修饰符,但他没有捕获50px部分。使用'g'修饰符,结果是na数组与整个匹配...

top:50px
right:50px
... etc ...

是否有一个单行解决方案或我必须做另一个reg匹配?此外,是否有任何奇怪的行为涉及修饰符和我不知道的括号?

2 个答案:

答案 0 :(得分:3)

您需要迭代重新应用正则表达式:

var myregexp = /[a-zA-Z]+:([0-9]+px);/g;
var match = myregexp.exec(subject);
while (match != null) {
    for (var i = 0; i < match.length; i++) {
        // matched text: match[i], so match[1] contains e.g. "50px" 
    }
    match = myregexp.exec(subject);
}

答案 1 :(得分:0)

以下是适用于不包含:;的值的解决方案:

var s = 'top:50px;right:50px;bottom:50px;left:50px;';
s.match(/[^:;]+(?=;|$)/g);

以下是基于键:

var s = 'top:50px;right:50px;bottom:50px;left:50px;';
s.replace(/[ ;]+$/, '').split(/(?:^| *;).*?: */).slice(1);
相关问题