我正在尝试使用string.replace正则表达式创建一个javascript计算器,但我遇到了问题。
例如,我的输入是10k
,我正在尝试用000
替换k。
所以,我已经制作了这个正则表达式,试图用字符串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
,它是字符串“kmbt”中字母k的位置。有了这个位置,我想继续计算,但目前与此问题无关。
问题是显然我不能在正则表达式的'替换'部分使用函数。
有没有人知道这个问题的解决方案或我如何在'替换'部分使用函数?
ANSWER
您不能直接在正则表达式中进行修改,因此您必须在“替换”部分添加一个函数作为参数,您可以在其中对结果进行修改!
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
});
答案 0 :(得分:3)
您可以使用函数来替换字符串,如下所示:
$a=0; //initalize $a
$num = array(4, 25, 60, 7, 8);
foreach($num as $numbers){
if(($numbers % 5) == 0){
$a++; //increment a
}
}
"10k".replace(/(\d+(?:[.,]+\d+)?)([kmbt])/gi, function(match, p1, p2) {
return p2;
});
和p1
对应正常替换中的p2
和"$1"
。在返回结果之前,可以在函数中进行任何其他转换或计算。为了在字符串"$2"
中找到p2
的索引,这应该有效:
"kmbt"
您可以详细了解如何执行此操作here。
答案 1 :(得分:1)
首先indexOf
与正则表达式模式无关,因此$2
将不可用。第二次替换可以取一个函数。
var SUFFIXES = {
k: '000',
m: '000000',
b: '000000000',
t: '000000000000'
};
'10k'.replace(/([\d.,]+)([kmbt])/, function (match, digits, suffix) {
return digits + SUFFIXES[suffix];
});