在javascript中从字符串收集/提取数字

在javascript中从字符串收集/提取数字,javascript,Javascript,考虑下面的脚本 $('#accessories').editable({ validate: function(value) { // solution will be placed here } }); 如果变量“value”的字符串值为“防锈(2)、扰流器(1)、报警(2)、侧裙(1)”,我如何从“value”变量中求和(包括括号)数字(2)(1)(2)(1)。看看这个 我留给您添加一些异常,比如如果数字是字符串中的最后一项,因为我的代码不查找

考虑下面的脚本

$('#accessories').editable({ 
    validate: function(value) {
              // solution will be placed here
    }
});
如果变量“value”的字符串值为“防锈(2)、扰流器(1)、报警(2)、侧裙(1)”,我如何从“value”变量中求和(包括括号)数字(2)(1)(2)(1)。

看看这个

我留给您添加一些异常,比如如果数字是字符串中的最后一项,因为我的代码不查找它,也不会添加它

你所要做的就是循环字符串,检查它是否是一个数字,如果是,将它添加到一个变量并继续循环,当下一个字符不是一个数字时,添加你已经构建的内容

for (var i = 0; i < str.length; i++) {
    if (isNumber(str[i])) {
        strNumber += str[i];
    } else if (strNumber != "") {
        retVal += Number(strNumber);
        strNumber = "";
    }
}
for(变量i=0;i
尝试下面的代码。首先,您设置一个正则表达式来查找字符串中的数字,这将返回一个匹配数组,然后您可以将该数组传递给一个自定义函数,该函数将数组中的所有数字相乘

var str = "RUST-PROOFING (2),SPOILER (1),ALARM (2),SIDE-SKIRT (1)";
var re = /[\d+]/g //Match only numbers (along the whole string)
var matches = str.match(re);
var total = multiply(matches); //Pass your array of matches to your multiply function;
alert(total); //4

function multiply(arr) { //Multiplies all numbers in an array and returns the total value;
    var num = 0;
    for(var i = 0, len = arr.length; i < len; i++) {
        num += parseInt(arr[i]);
    }
    return num;
}
var str=“防锈(2)、扰流板(1)、报警器(2)、侧裙(1)”;
var re=/[\d+]/g//仅匹配数字(沿整个字符串)
变量匹配=str.match(re);
var total=相乘(匹配)//将匹配数组传递给乘法函数;
警报(总数)//4.
函数multiply(arr){//将数组中的所有数字相乘并返回总值;
var num=0;
对于(变量i=0,len=arr.length;i
看一看

谢谢大家(特别是Shryme和Mark)。。这是一个总结。。。希望这能帮助像我这样的新手

$('#accessories').editable({ 
validate: function(value) {
    $ntot = add(value.toString());
    $('#npoints').editable('setValue', $ntot);
}
});

function add(str) {
var retVal = 0;
var strNumber = "";

for (var i = 0; i < str.length; i++) {
    if (isNumber(str[i]) && (str[i-1]=="(" || str[i+1]==")")) {
        strNumber += str[i];
    } else if (strNumber != "") {
        retVal += Number(strNumber);
        strNumber = "";
    }
}
return retVal;
}

function isNumber(n) {
    if (n == "") return false;
    return !isNaN(n);
}
$(“#附件”)。可编辑({
验证:函数(值){
$ntot=add(value.toString());
$('#npoints')。可编辑('setValue',$ntot);
}
});
函数添加(str){
var-retVal=0;
var strNumber=“”;
对于(变量i=0;i
我想你最好的办法是匹配一个RegExp,然后根据索引得到数字。它不起作用,看看这个小提琴,它的读数是21,像2和1,而不是一个整体,他想把数字相加,而不是相乘。我不好,我想他是说相乘,我修改了代码和小提琴来反映这一点,但代码仍然缺乏以下事实:,如果字符串是“22 23”,它将使2+2+2+3而不是22+23谢谢你的标记,你给了我一个想法。。。它的求和是正确的,但是,如果一个字符串有一个像扰流板1(1)这样的数字,那么这个求和就是2。。要求和的数字仅为用()括起来的数字。。但是非常感谢,我正在修改你的代码。。也谢谢你。。。需要总结的是那些用()括起来的数字。。我正在尝试一些想法……)您可以首先检测“(”并将其添加到strNumber,然后如果strNumber包含“(”或一个数字作为最后一个元素,则寻找添加新数字的方法,如果字符是“)”,将其转换为一个数字(没有第一个元素,因为它将是“(”),并且如果您只需要()中的1个数字,请记住向上投票有助于您的答案然后Mark的答案也很好!呵呵,我发现了一个bug..如果数字>9,那么求和就错了:)解决方案只限制1-9…我正在尝试修复它…这就是为什么我要将它们添加到strNumber中的原因,你的新代码看起来如果一个数字在()之间,如果你想在其中包含多个数字,你需要检测第一个(,然后将所有数字相加,直到结束)