Javascript 无法在正则表达式替换中使用$2反向引用
我正在尝试使用string.replace regex制作一个javascript计算器,但遇到了一个问题。Javascript 无法在正则表达式替换中使用$2反向引用,javascript,regex,Javascript,Regex,我正在尝试使用string.replace regex制作一个javascript计算器,但遇到了一个问题。 例如,我的输入是10k,我试图用000替换k 因此,我制作了这个正则表达式,它试图用字符串kmbt中字母k的索引替换所有出现的情况 替换(/(\d+(?:[,]+\d+)([kmbt])/gi,“kmbt.indexOf($2”) 当我记录这个时,它返回-1,这不是我想要的 因此,将正则表达式稍微更改为:var answer=“10k”。替换(/(\d+(?:[,]+\d+)([kmbt
例如,我的输入是
10k
,我试图用000
替换k
因此,我制作了这个正则表达式,它试图用字符串kmbt
中字母k
的索引替换所有出现的情况
替换(/(\d+(?:[,]+\d+)([kmbt])/gi,“kmbt.indexOf($2”)代码>
当我记录这个时,它返回-1,这不是我想要的
因此,将正则表达式稍微更改为:var answer=“10k”。替换(/(\d+(?:[,]+\d+)([kmbt])/gi,“$2”)代码>它将正确返回k
我希望它返回的是0
,这是字符串“kmbt”中字母k的位置。有了这个职位,我想继续计算,但目前这与这个问题无关
问题是显然我不能在正则表达式的“replace”部分使用函数
是否有人知道此问题的解决方案,或者我如何使用“替换”部分中的函数
回答
您不能直接在正则表达式中进行修改,因此必须将函数作为参数添加到“replace”部分,以便对结果进行修改
var-answer=rsn.replace(/(\d+(?:[,]+\d+)([kmbt])/gi,函数(匹配,p1,p2){
//对p1和p2执行一些操作并返回一些内容
返回p1+p2//例如
});代码>您可以使用函数替换字符串,如下所示:
"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);
});
您可以阅读有关如何执行此操作的更多信息。您可以使用函数替换字符串,如下所示:
"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);
});
您可以阅读有关如何执行此操作的更多信息。首先indexOf
与regexp模式无关,因此$2
将不可用。第二次替换可以发挥作用
var SUFFIXES = {
k: '000',
m: '000000',
b: '000000000',
t: '000000000000'
};
'10k'.replace(/([\d.,]+)([kmbt])/, function (match, digits, suffix) {
return digits + SUFFIXES[suffix];
});
首先,indexOf
与regexp模式无关,因此,$2
将不可用。第二次替换可以发挥作用
var SUFFIXES = {
k: '000',
m: '000000',
b: '000000000',
t: '000000000000'
};
'10k'.replace(/([\d.,]+)([kmbt])/, function (match, digits, suffix) {
return digits + SUFFIXES[suffix];
});
不知道没有函数就不能在正则表达式中直接使用函数,谢谢。不知道没有函数就不能在正则表达式中直接使用函数,谢谢。谢谢你的回答,这帮助我找到了问题的解决方案!谢谢你的回答,这帮助我找到了解决问题的方法!