考慮以下字符串:如何使用js將字母和數字分割成不同的變量?
var myString = "s1a174o10";
我想有以下結果:
var s = 1;
var a = 174;
var o = 10;
串上每個字母下面的編號一致。
請記住,這個字符串不是靜態的,這裏是另一個例子:
var myString = "s1p5a100";
考慮以下字符串:如何使用js將字母和數字分割成不同的變量?
var myString = "s1a174o10";
我想有以下結果:
var s = 1;
var a = 174;
var o = 10;
串上每個字母下面的編號一致。
請記住,這個字符串不是靜態的,這裏是另一個例子:
var myString = "s1p5a100";
你可以用正則表達式做到這一點:
var vars = {};
myString.replace(/(\D+)(\d+)/g, function(_,k,v){ vars[k] = +v });
console.log(vars); //=> {s: 1, a: 174, o: 10}
你可以使用正則表達式:
var ITEM = /([a-z])(\d+)/g;
然後把每場比賽爲一個對象:
var result = {};
var match;
while(match = ITEM.exec(myString)) {
result[match[1]] = +match[2];
}
現在您可以使用result.s
,result.a
和result.o
。
+1下面是它在行動中的一個例子http://jsfiddle.net/2YL3z/ –
正則表達式可以幫助你......
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
。
這適用於給定的字符串,但minitech的答案更加健壯,因爲它適用於不完全符合該格式的字符串,如「24a1b2c3」。這是因爲他的RegEx期望在一個字符後面有一個數字,在這裏你的字符串以字符串開始。見http://jsfiddle.net/2YL3z/2/ –
mmm ...使用'replace'替換不是替換的東西?這對於我來說就是一件太麻煩的事情...... –
'替換'循環匹配在我的書中是很常見的做法...我發現'while(assignment)'模式更難讀取TBH。 – elclanrs
我同意'while'中的賦值可能會讓人困惑。雖然它很漂亮,但我也遠離它。我更喜歡'var matches = myString.match(/(\ D +)(\ d +)/ g)'; 'for(var i = 1; i