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