2013-07-11 17 views

回答

2

你可以用正則表達式做到這一點:

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

console.log(vars); //=> {s: 1, a: 174, o: 10} 
+1

mmm ...使用'replace'替換不是替換的東西?這對於我來說就是一件太麻煩的事情...... –

+0

'替換'循環匹配在我的書中是很常見的做法...我發現'while(assignment)'模式更難讀取TBH。 – elclanrs

+0

我同意'while'中的賦值可能會讓人困惑。雖然它很漂亮,但我也遠離它。我更喜歡'var matches = myString.match(/(\ D +)(\ d +)/ g)'; 'for(var i = 1; i

5

你可以使用正則表達式:

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

然後把每場比賽爲一個對象:

var result = {}; 
var match; 

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

現在您可以使用result.s,result.aresult.o

+1

+1下面是它在行動中的一個例子http://jsfiddle.net/2YL3z/ –

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

+0

這適用於給定的字符串,但minitech的答案更加健壯,因爲它適用於不完全符合該格式的字符串,如「24a1b2c3」。這是因爲他的RegEx期望在一個字符後面有一個數字,在這裏你的字符串以字符串開始。見http://jsfiddle.net/2YL3z/2/ –

相關問題