如果我{n}要用捕获的值替换字符串中出现的所有内容,如下所示:
"Replacing {1} multiple {2} occurrences.".replace(/\{(\d)\}/g, "$1")
Run Code Online (Sandbox Code Playgroud)
结果将是正确的:
Replacing 1 multiple 2 occurrences.
Run Code Online (Sandbox Code Playgroud)
另外,如果我要检查typeof更换"$1":
"Replacing {1} multiple {2} occurrences.".replace(/\{(\d)\}/g, typeof "$1")
Run Code Online (Sandbox Code Playgroud)
我会得到预期的结果:
Replacing string multiple string occurrences.
Run Code Online (Sandbox Code Playgroud)
我想做什么:
但是,我想要做的是使用捕获的值作为数组索引,为此,我想将捕获的值强制转换为数字parseInt,如下所示:
"Replacing {1} multiple {2} occurrences.".replace(/\{(\d)\}/g, parseInt("$1"))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会返回:
Replacing NaN multiple NaN occurrences.
Run Code Online (Sandbox Code Playgroud)
我的问题:
为什么我无法将这些捕获的值强制转换为数字?
"Replacing {1} multiple {2} occurrences.".replace(
/\{(\d+)\}/g, function (_, x) { return myArray[+x]; })
Run Code Online (Sandbox Code Playgroud)
如果第二个参数myString.replace是函数,则对于每个匹配,使用匹配的string($&)作为其第一个参数调用它,并将任何捕获组作为后续参数及其返回值强制转换为String并用作替换文本.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace说
将函数指定为参数
您可以将函数指定为第二个参数.在这种情况下,将在执行匹配后调用该函数.函数的结果(返回值)将用作替换字符串.(注意:上述特殊替换模式在这种情况下不适用.)请注意,如果第一个参数中的正则表达式是全局的,则每次完全匹配时将调用该函数多次.