2011-10-17 47 views
4

我如何解析字符串像解析選項字符串

文本= 「安德烈\的照片;假期」;字體=宋體;大小= 12

像JavaScript對象對象:

var options = { 
    text: 'Andrey\'s Photos; Vacation', 
    font: 'Arial', 
    size: 12 
} 

我的問題是,價值可能包含;=字符,所以我不能只用s.split(';')。但是,如果值字符串中有這些符號,則該值應該用單引號或雙引號括起來。所以解析該字符串應該是可能的。

+2

雙引號可以轉義成'\「嗎? –

回答

3

假設的答案是否定的:

var s = 'Text="Andrey\'s Photos; Vacation";Font=Arial;Size=12;SingleQuoted=\'The dog said "Foo"\''; 
var re = /(.*?)=(?:"(.*?)"|'(.*?)'|([^;]*?))(?:;|$)/g; 
var match; 

var options = {} 
while(match = re.exec(s)) 
{ 
    var string_val = match[2] || match[3] || match[4]; 
    var num_val = parseFloat(string_val); 
    var val = isNaN(num_val) ? string_val : num_val; 
    options[match[1].toLowerCase()] = val; 
} 

編輯:編輯爲允許使用任何「或」分隔符但是,你仍然無法逃脫

編輯2:編輯使用數字鍵入(如果適用),現在它只是檢查它是否可以被強制轉換爲數字,而不是試圖考慮引號。