0

给定以下代码:

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;

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

4

1 回答 1

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,则返回正确的 backref。但是如果 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 操作处理程序。

于 2012-11-18T00:01:56.443 回答