4

给定以下字符串:

var myString = "s1a174o10";

我想得到以下结果:

var s = 1;
var a = 174;
var o = 10;

字符串上的每个字母都与以下数字匹配。

请记住,字符串不是静态的,这是另一个示例:

var myString = "s1p5a100";
4

3 回答 3

5

您可以使用正则表达式:

var ITEM = /([a-z])(\d+)/g;

然后将每个匹配项放入一个对象中:

var result = {};
var match;

while(match = ITEM.exec(myString)) {
    result[match[1]] = +match[2];
}

现在您可以使用result.sresult.aresult.o

于 2013-07-11T00:10:25.977 回答
2

您可以使用正则表达式执行此操作:

var vars = {};
myString.replace(/(\D+)(\d+)/g, function(_,k,v){ vars[k] = +v });

console.log(vars); //=> {s: 1, a: 174, o: 10} 
于 2013-07-11T00:12:31.447 回答
0

正则表达式可以帮助您...

var myString = "s1a174o10";
var matches = myString.match(/([a-zA-Z]+)|(\d+)/g) || [];

for(var i = 0; i < matches.length; i+=2){
    window[matches[i]] = matches[i+1];
}

警告:s,a,o 在这里是全局的。如果你愿意,你可以声明一个对象而不是在 window这里使用。

于 2013-07-11T00:17:07.520 回答