2012-01-31 81 views
0

我有一個字符串:分割字符串作爲關鍵字:值對在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

回答

1

我會做這種方式:

"{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

你期待在你的鍵或值的大括號?如果不是,爲什麼不用'}'分割?

+0

考慮如果我們之間有大括號之間的空間。 – gviswanathan 2012-01-31 19:37:08

0

而不是捕獲您想要保留的項目(這將導致在從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