2016-02-06 57 views
0

嗨,大家好,有一種方法拆分像這樣的字符串:的Javascript:分割鍵值(含空格)

var tMatch='key1="true" key2="Group 1"'; 

,以獲得「真」和「組1」?

我已經試過這一點:

var key1; 
var key2; 

tMatch.split(' ').forEach(function(x){ 
     var arr = x.split('='); 
     if (arr[1]){ 
      if (arr[0]=='key1'){ 
       key1=arr[1]; 
      }else if (arr[0]=='key2'){ 
       key2=arr[1]; 
      } 
      } 
    }); 

    alert('key1:'+key1); 
    alert('key2:'+key2); 

但輸出爲KEY2是錯誤的,是:

"Group 

,而不是

"Group 1" 

因爲空間。 你能提出一個解決方案嗎? 預先感謝您。 請注意,鍵1和鍵2可以包含多個也像空格: 鍵1 =「今天是美好的一天」鍵2 =「明天不是」

+0

你想逃避報價嗎?然後,爲了做到這一點,你需要一個解析器。 – Oriol

+0

問題不在於引號,部分「1」由於空間而錯過,所以輸出爲「Group」,而不是「Group 1」 – navy1978

+0

@MikeC我認爲您提出的解決方案不適用於我的案例,因爲key1的值也可以包含一個空格或多個空格,例如:key1 =「今天是美好的一天」 – navy1978

回答

2

假設你不能在字符串內部有引號,你可以使用正則表達式來做到這一點。

var tMatch = 'key1="false" key2="Group 1"'; 
 
var key1; 
 
var key2; 
 

 
var re = /(\w+)="([^"]*)"/g; 
 
while (match = re.exec(tMatch)) { 
 
    if (match[1] == 'key1') { 
 
    key1 = match[2]; 
 
    } else if (match[1] == 'key2') { 
 
    key2 = match[2]; 
 
    } 
 
} 
 

 
alert('key1:' + key1); 
 
alert('key2:' + key2);

+0

嘿男爵!我真的很喜歡你解決方案是更優雅的阿米特的一個...非常感謝! (的確我不需要引號) – navy1978

1

下面的代碼使用方法:

var tMatch='key1="false" key2="Group 1"'; 
var key1; 
var key2; 

tMatch.split('" ').forEach(function(x){ 
     var arr = x.split('='); 
     if (arr[1]){ 
      if (arr[0]=='key1'){ 
       key1=arr[1]+'"'; 
      }else if (arr[0]=='key2'){ 
       key2=arr[1]; 
      } 
      } 
    }); 

    alert('key1:'+key1); 
    alert('key2:'+key2); 
} 
+0

感謝你覺得它像魅力一樣工作! ;) – navy1978

0

你可以做

tMatch.replace(/key\d=/g, '').split('"').forEach(function(item){ 
    if (item.length){ 
     console.log(item); 
    } 

});