【发布时间】:2014-05-28 09:32:19
【问题描述】:
这里有人可以告诉我修改下面的正则表达式的方法,以便我可以使用它为每个数组项获取多个整数吗?我可以使用 \d+ 检测到下面最上面的 str 中的一个整数。但是,该函数会与其他两个示例出错,在它下面,str = "7yes9 Sir2" 等。谢谢。
//str = "10 2One Number*1*";
//output -> [10, 2One, Number*1*] -> [10 + 2 + 1] -> 13
var str = "7Yes9 Sir2";
//output -> NaN
//var str = "8pop2 1";
//output -> NaN
function NumberAddition(str) {
input = str.split(" ");
var finalAddUp = 0;
var finalArr = [];
for(var i = 0; i<=input.length-1; i++) {
var currentItem = input[i];
var regexp = /(\d+)/g;
finalArr.push(Number(currentItem.match(regexp)));
var itemToBeCounted = +finalArr[i];
finalAddUp += itemToBeCounted;
}
return finalAddUp;
}
console.log(NumberAddition(str));
【问题讨论】:
-
它失败了,因为
Number不允许在array thatmatchreturns 上进行操作,并且您(显然!)有超过 1 个匹配项。重新考虑你的方法。 -
我昨天刚学了RegExp。这是针对用于学习目的的编码挑战。我不知道如何重新考虑我的方法。再说一遍:你能帮帮我吗?我以为我说过我不知道如何找到不止一个匹配项,无论如何。谢谢。
-
但是您正在找到不止一个匹配项——这就是您收到错误的原因!在您的输入中尝试
console.log(currentItem.match(regexp));。您必须重新考虑您的方法的原因是因为您已经假设您在循环中获得了 1 个匹配项。 -
另外,顺便说一句,我并不怀疑你是否匹配不允许数字,我想补充一点,尽管如此,第一个数组示例确实有效。并且还包括Number的用法:即, //str = "10 2One Number*1*"; //输出 -> [10, 2One, Number*1*] -> [10 + 2 + 1] -> 13
-
我能问一下为什么 Number 允许在那里,但在其他示例中不允许?只是好奇,因为我不明白,而且你似乎理解得更好。
标签: javascript arrays regex function