gpt4 book ai didi

javascript - .NET 的 JavaScript 中的 Match.Result

转载 作者:行者123 更新时间:2023-11-28 00:53:31 28 4
gpt4 key购买 nike

JavaScript 中是否存在与 .NET 中的 Match.Result 等效的函数,以便使用替换函数,仍然可以对可能部分逻辑使用方便的替换?

或者是否需要提供一个自定义但简单的函数,如下所示,该函数似乎在所有情况下都有效?

RegExp.matchResult = function (subexp, offset, str, matches) {
return subexp.replace(/\$(\$|&|`|\'|[0-9]+)/g, function (m, p) {
if (p === '$') return '$';
if (p === '`') return str.slice(0, offset);
if (p === '\'') return str.slice(offset + matches[0].length);
if (p === '&' || parseInt(p, 10) <= 0 || parseInt(p, 10) >= matches.length) return matches[0];
return matches[parseInt(p, 10)];
});
};
var subexp; //fill in with substitution expression
var replaceFunc = function () {
return RegExp.matchResult(subexp, arguments[arguments.length - 2], arguments[arguments.length - 1], Array.prototype.slice.call(arguments).slice(0, -2));
};

最佳答案

你的函数看起来不错,但我可以想到不同的方法:

String.prototype.replaceMatch = function(re, replacement, fn) {
fn = fn || function(p) { return p; };
return this.replace(re, function(m) {
var replaced = m.replace(re, replacement);
var params = Array.prototype.slice.call(arguments);
params.unshift(replaced);
return fn.apply(this, params);
});
};

// Some simple example
alert("foo 42 bar 12345 baz".replaceMatch(
/(\d)(\d*)/g,
"[$1]($2)",
function(replaced, m, a, b) {
return replaced + "<" + a + "," + b + ">";
}
));

有一个陷阱:只有当正则表达式可以匹配匹配结果时它才会起作用,因此它并不适用于所有情况。 (写完答案后我意识到了这一点)

而且我不知道它是否真的比你的简单......

关于javascript - .NET 的 JavaScript 中的 Match.Result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497147/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com