javascript - 在javascript中将匹配的数据获取到数组中,而不使用任何循环

标签 javascript regex

问题背景 - 我想获得数字的 n 次根,用户可以在其中输入“x 的 n 次根”之类的表达式。我编写了一个函数 nthroot(x,n) ,它返回正确的预期输出。我的问题就是从表达式中提取x和n的值。

我想提取一些匹配的模式并将其存储到一个数组中以供进一步处理,以便在下一步中我将从数组中弹出两个元素并替换抑制中的结果。但是我无法将所有值放入一个数组中不使用循环的数组。

我的代码的 Perl 等效项如下所示。

$str = "the 2th root of 4+678+the 4th root of -10000x90";
@arr = $str =~ /the ([-+]?\d+)th\s?root\s?of\s?([-+]?\d+)/g;
print "@arr";

我想要与上述代码等效的 JavaScript。

任何一行表达式,如下所示。

expr = expr.replace(/the\s?([+-]\d+)th\s?root\s?of([+-]\d+)/g,nthroot(\\$2,\\$1));

请帮助我。

最佳答案

.replace() method您当前使用的,顾名思义,用于进行字符串替换,而不是返回单个匹配项。使用 .match() method 会更有意义相反,但是如果您使用回调函数,您可以(错误)使用.replace():

var result = expr.replace(/the\s?([+-]\d+)th\s?root\s?of([+-]\d+)/,function(m,m1,m2){
  return nthroot(+m2, +m1);
});

请注意,回调中的参数将是字符串,因此在将它们传递给 nthroot() 函数时,我使用一元加运算符将它们转换为数字。

关于javascript - 在javascript中将匹配的数据获取到数组中,而不使用任何循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928731/

相关文章:

ruby - 正则表达式,如何匹配多行?

regex - ios NSRegularExpression 麻烦

javascript - 放大时 D3 轴标签变得过于细粒度

javascript - 我想更改 : #shadow root (user-agent) 显示的 HTML 文本

javascript - Firebase onAuthStateChanged 和 Navigation Guards 的模式 - Quasar 应用

javascript - ondragstart、ondragover、onstart - $scope 未定义

javascript - Webtask.io 后端找不到模块

c# - 提高正则表达式效率

python - 如何使用 Python Regex 忽略字符

mysql - grepWin 中的正则表达式匹配文本 block 中由任何内容分隔的三个指定单词