我正在尝试使用 string.replace 正则表达式制作一个 JavaScript 计算器,但我遇到了一个问题。
例如我的输入是 10k
,我尝试将 k 替换为 000
。
所以,我制作了这个正则表达式,尝试用字母 k
的索引替换所有出现的情况。在字符串 kmbt
中.
var answer = "10k".replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, "kmbt".indexOf("$2"));
当我console.log这个时,它返回-1,这不是我想要的。
因此将正则表达式稍微更改为:var answer = "10k".replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, "$2");
它将正确返回 k
。
我希望它返回的是 0
这是字母 k 在字符串“kmbt”中的位置。有了这个位置,我想继续计算,但这目前与这个问题无关。
问题是显然我无法在正则表达式的“替换”部分使用函数。
有谁知道这个问题的解决方案或者我如何使用“替换”部分中的函数?
答案
您无法直接在正则表达式中进行修改,因此您必须添加一个函数作为参数到“替换”部分,您可以在其中对结果进行修改!
var answer = rsn.replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, function(match, p1, p2) {
// do something with p1 and p2 and return something
return p1 + p2 // for example
});
最佳答案
您可以使用函数来替换字符串,如下所示:
"10k".replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, function(match, p1, p2) {
return p2;
});
p1
和 p2
对应于正常替换中的 "$1"
和 "$2"
。在返回结果之前,可以在函数中进行任何其他转换或计算。为了在字符串 "kmbt"
中找到 p2
的索引,应该可以这样做:
"10k".replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, function(match, p1, p2) {
return "kmbt".indexOf(p2);
});
您可以阅读有关如何执行此操作的更多信息 here .
关于javascript - 无法在正则表达式替换中使用 $2 反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38806443/