Javascript “替换”替换回退

Javascript `replace` Replacement Fallback

本文关键字:替换 回退 Javascript      更新时间:2023-09-26

举个例子:

var tag_oh_so_alone_ = '[FieldName]',
    tag_with_default = '[FieldName:The default value]',
    the_regex = /'[([a-z]+)(':([^']]+))?']/i;
console.log(
    "Results:'n",
    tag_oh_so_alone_.replace(the_regex,"1: $1'n 2: $2'n 3: $3'n"),
    tag_with_default.replace(the_regex,"1: $1'n 2: $2'n 3: $3'n")
);

控制台显示:

Results:
 1: FieldName
 2: 
 3: 
 1: FieldName
 2: :The default value
 3: The default value

我想做的是,在替换声明中(换句话说,我们包含"$1"等的地方),基本上指定:如果填充$3,请使用$3,否则使用 $1

预期输出如下:

tag_oh_so_alone_ => FieldName

tag_with_default => The default value

这可能吗?

你可以将一个函数作为替换器传递给String.replace,像这样

function replacer(match, p1, p2, p3) {
    if (p3) {
        return "1: " + p1 + "'n 2: " + p2 + "'n 3: " + p3 + "'n"
    } else {
        return "1: " + p1 + "'n 2: " + p1 + "'n 3: " + p1 + "'n"
    }
}
console.log(
    "Results:'n",
    tag_oh_so_alone_.replace(the_regex, replacer),
    tag_with_default.replace(the_regex, replacer)
);

这样,输出就变成了,

Results:
 1: FieldName
 2: FieldName
 3: FieldName
 1: FieldName
 2: :The default value
 3: The default value

在这里,p1p2p3是实际匹配的组。如果未填充/匹配p3,则将undefined。您可以根据需要在replacer函数中自定义函数的返回值。