给出以下代码:
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;
如何在不需要匹配来更新反向引用的情况下执行此操作?
答案 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操作处理程序。