分割字符串作为关键字:值对在javascript

问题描述:

我有一个字符串:分割字符串作为关键字:值对在javascript

"{key1:value1}{key2:value2}"

我想用正则表达式来拆分这些字符串:

"key1:value1","key2:value2"

最后我得到了像val.split(/{(.*?)}/);

出人意料的是,这个表情不是IE7的工作表现。 只是想知道为什么浏览器兼容正则表达式。而且,我们是否有任何替代的正则表达式来修复IE7。

+0

http://blog.stevenlevithan.com/archives/cross-browser-split – 2012-01-31 18:50:54

+0

你为什么要拆分它?它有效的JSON?或有效的JavaScript可能是'eval''d? – 2012-01-31 18:51:48

+0

其无效的JSON,出于某种原因将其用作元数据。 – gviswanathan 2012-01-31 19:33:55

我会做这种方式:

"{key1:value1}{key2:value2}".replace(/^{|}$/g, '').split('}{') 

和它给你["key1:value1", "key2:value2"]阵列。

+0

我想它会给'[“{key1:value1”,“key2:value2}”]',这是不需要的。 – Borodin 2012-01-31 19:04:14

+1

@Borodin不,请注意'.replace(/^{|} $/g,'')'这部分可以从开始和结束时删除这些大括号。 PS。我不会在没有测试的情况下发布它。 – dfsq 2012-01-31 19:08:36

+0

是的你是对的。我现在正在使用这个。但只是好奇为什么我们不能在单一表达中做到这一点。 – gviswanathan 2012-01-31 19:36:47

你期待在你的键或值的大括号?如果不是,为什么不用'}'分割?

+0

考虑如果我们之间有大括号之间的空间。 – gviswanathan 2012-01-31 19:37:08

而不是捕获您想要保留的项目(这将导致在从split返回的那些值之间的空字符串)为什么不只是分割所有大括号?

val.split(/[{}]+/); 

而不是试图让split工作,我会这样用一个简单的全局匹配

val.match(/([^{}]+)/g); 

这是很好的,除非有可能是在字符串中的空白,写在这种情况下, messier

val.match(/([^\s{}](?:[^{}]*[^\s{}])?)/g); 

是必要的。

+0

你也应该删除第一个'{'和最后一个'}',因为它们产生假的数组值:'[“”,“key1:value1”,“key2:value2”,“”]' – dfsq 2012-01-31 19:10:19

+0

你说得对。但是这两个表达方式之间没有区别。任何如何在IE7中表达失败。这让我很惊讶。 – gviswanathan 2012-01-31 19:35:24

+0

永远不要信任Internet Explorer。它遵守标准的声誉很差。 – Borodin 2012-01-31 21:32:50