问题背景 - 我想获得数字的 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/