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

时间:2013-12-04 15:45:25

标签: javascript

考虑下面的脚本..

$('#accessories').editable({ 
    validate: function(value) {
              // solution will be placed here
    }
});

如果变量'value'的字符串值为“RUST-PROOFING(2),SPOILER(1),ALARM(2),SIDE-SKIRT(1)”,我怎么能总结(用括号括起来)数字(2)(1)(2)(1)来自'value'变量。

3 个答案:

答案 0 :(得分:0)

看看这个FIDDLE

我留给你添加一些异常,比如数字是字符串中的最后一个,因为我的代码不会查找它而不会添加它。

你所要做的就是循环字符串,检查它是否是数字,如果是,将它添加到var并继续循环,当下一个char不是数字时,添加你已构建的数字。 / p>

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

答案 1 :(得分:0)

尝试以下代码。首先设置正则表达式以查找字符串中的数字,这将返回一个匹配数组,然后您可以将此数组传递给自定义函数,该函数将数组中的所有数字相乘。

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;
}

查看fiddle

答案 2 :(得分:0)

谢谢你们(特别是对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);
}