2016-02-06 27 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); 
    } 

});