是否有可能将捕获的值强制转换为JavaScript中的replace()内的数字?

时间:2011-08-17 01:22:29

标签: javascript

如果我要用捕获的值替换字符串中所有出现的{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.

我的问题:

为什么我无法将这些捕获的值强制转换为数字?

2 个答案:

答案 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