如果您将具有数量不等的反向引用,则参数计数(和位置)也是可变的。该MDN的Web文档描述了一个sepcifing功能替代参数的follwing语法:
function replacer(match[, p1[, p2[, p...]]], offset, string)
例如,使用以下正则表达式:
var searches = [
'test([1-3]){1,3}', // 1 backreference
'([Ss]ome) ([A-z]+) chars', // 2 backreferences
'([Mm][a@]ny) ([Mm][0o]r[3e]) ([Ww][0o]rd[5s])' // 3 backreferences
];
for (var i in searches) {
"Some string chars and many m0re w0rds in this test123".replace(
new RegExp(
searches[i]
function(...args) {
var match = args[0];
var backrefs = args.slice(1, args.length - 2);
// will be: ['Some', 'string'], ['many', 'm0re', 'w0rds'], ['123']
var offset = args[args.length - 2];
var string = args[args.length - 1];
}
)
);
}
您不能在这里使用'arguments'变量,因为它是类型Arguments
而没有类型,Array
因此它没有slice()
方法。