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

标签 javascript regex

我正在尝试使用 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;
});

p1p2 对应于正常替换中的 "$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/

相关文章:

javascript - polymer 3 : Text to HTML

javascript - 将 Flash 视频输出捕获到 mp4 文件的脚本方式?

php - 如何从 JS 数组通过 JSON 获取 PHP 数组? (我至少在那里的一半)

regex - 如何获取我的regex方法以返回所有路径匹配项?

php - 在关键字 PHP 之前获取至少 X 个字符

javascript - 我的表格会被黑客入侵吗

javascript - jQuery - 通过单击包含 div 来提交按钮

javascript - 正则表达式:无法进行负向预测

c# - 部分文本搜索的快速算法

java - 正则表达式有条件替换