如何在JavaScript中更新内联反向引用?

时间:2012-11-17 23:55:38

标签: javascript regex grouping backreference inline-code

给出以下代码:

alpha = ('"foo"="bar"').replace(/.*foo...([^"]*).*/, RegExp.$1)
beta = ('"bar"="baz"').replace(/.*bar...([^"]*).*/, RegExp.$1)

预期输出为:

alpha is "bar"
beta is "bar"

实际输出是:

alpha is ""
beta is "bar"

这让我想到了这个解决方法:

var alpha = beta = "", n = "\n";

    ('"foo"="bar"').match(/.*foo...([^"]*).*/);
    alpha.toString.v1 = ('"foo"="bar"').replace(/.*foo...([^"]*).*/, RegExp.$1)

    String('"bar"="baz"').replace(/.*bar...([^"]*).*/);
    beta.toString.v2 = ('"foo"="baz"').replace(/.*foo...([^"]*).*/, RegExp.$1)

    
    document.body.innerText += alpha.toString.v1 + n + alpha.toString.v2;

如何在不需要匹配来更新反向引用的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

你可以使用:

// $1 = first backref, $2 = 2nd on through $9
// (*)I'm not sure but I think "$10" gets replaced with "backref1"+"0"
alpha = subject.replace(regex, "$1 $2 ... $N");

*:经过一些测试后,它取决于匹配的内容。如果在第9天之后有反射,则将返回正确的反射。但如果backref不存在,它将按上述方式执行:“backref1”+“0”

或:

alpha = subject.replace(regex, function(matchedText, backref1, backref2, ...) {
    return "replacement text";
});



如果您尝试获取属性值匹配:

alpha = '"foo"="bar"'.replace(/"([^"]+)"="([^"]*)"/g, function(matched, attr, value) {
    // matched = "foo"="bar"
    // attr = foo
    // value = bar
});

如果在浏览器中完成此操作,要从页面上已有的元素获取属性,我强烈建议使用内置的DOM操作处理程序。