在javascript中将字符串拆分为键:值对

在javascript中将字符串拆分为键:值对,javascript,regex,Javascript,Regex,我有一个字符串: “{key1:value1}{key2:value2}” 我想使用正则表达式将这些字符串拆分为: “键1:value1”、“键2:value2” 最后我得到了类似于val.split(/{(.*)}/)的表达式 令人惊讶的是,这个表达式在IE7中不起作用。 只是想知道为什么正则表达式与浏览器兼容。还有,我们在IE7中有没有其他的正则表达式可以修复。您希望在键或值中使用大括号吗?如果不是,为什么不直接用“}”分割呢 我会这样做: "{key1:value1}{key2:value

我有一个字符串:

“{key1:value1}{key2:value2}”

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

“键1:value1”、“键2:value2”

最后我得到了类似于
val.split(/{(.*)}/)的表达式

令人惊讶的是,这个表达式在IE7中不起作用。
只是想知道为什么正则表达式与浏览器兼容。还有,我们在IE7中有没有其他的正则表达式可以修复。

您希望在键或值中使用大括号吗?如果不是,为什么不直接用“}”分割呢

我会这样做:

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

它为您提供
[“key1:value1”,“key2:value2”]
数组。

而不是捕获您想要保留的项目(这将导致从
拆分返回的值之间出现空字符串),为什么不在所有大括号上拆分呢

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

我不会试图让
split
工作,而是使用一个简单的全局匹配来编写它

val.match(/([^{}]+)/g);
这很好,除非字符串中可能有空格,在这种情况下,会出现混乱

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

是必需的。

为什么要拆分它?它是有效的JSON吗?或者可以是
eval
'd的有效JavaScript?它不是有效的JSON,出于某种原因将其用作元数据。我认为它将给出
[“{key1:value1”,“key2:value2}”]
,这是不需要的。@Borodin否,注意
.replace(//{key1:value1”,“key2:value2}”)
部分,它将这些大括号从括号和末尾移除。另外,我不会在没有测试的情况下发布它。是的,你是对的。我现在正在用这个。但我很好奇为什么我们不能在单个表达式中实现这一点。您还应该删除第一个
{
和最后一个
}
,因为它们会产生假数组值:
[“”、“key1:value1”、“key2:value2”、“”]
您是对的。但这两个表达式之间没有区别。在IE7中,这两个表达式如何失败。这让我大吃一惊。千万不要相信Internet Explorer。它因遵守标准而名声不佳。我以自己选择的方式写了这篇文章——不使用
拆分
——并将其添加到我的答案中。这个解决方案避免了多余的空白数组条目,如果需要的话,可以在目标字符串中处理嵌入的空白。