Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在正则表达式替换中使用$2反向引用_Javascript_Regex - Fatal编程技术网

Javascript 无法在正则表达式替换中使用$2反向引用

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

我正在尝试使用string.replace regex制作一个javascript计算器,但遇到了一个问题。
例如,我的输入是
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];
});

不知道没有函数就不能在正则表达式中直接使用函数,谢谢。不知道没有函数就不能在正则表达式中直接使用函数,谢谢。谢谢你的回答,这帮助我找到了问题的解决方案!谢谢你的回答,这帮助我找到了解决问题的方法!