2015-11-24 71 views
-1

我試圖修復一些幾乎JSON代碼有時由蒸汽而不是正確的。我的主要問題是關鍵。有一個stack topic關於解決類似的問題,但它並不完美。與/(['"])?([a-zA-Z0-9_]+)(['"])?:/g匹配的鍵還可以匹配http鏈接或內聯css。JavaScript - 匹配鍵與正則表達式格式不正確JSON

是否有可能匹配/(['"])?([a-zA-Z0-9_]+)(['"])?:/g不在([\'](?:.)*[\'])匹配的字符串(此值匹配值)?

樣畸形的JSON:

{ 
    app_data: 
    { '123': 
     { 
      appid: 123, 
      name: 'some game', 
      icon: 'http://example.com', 
      test: 'some text with link http://steamcommunity.com don't match it please', 
      sample: 'blah blah background: red; blah blah' 
     } 
    } 
} 
+2

嗯,它看起來像一個結構良好的javascript :)如果你相信它的來源足夠多,你可以簡單地使用'eval'。這當然是邪惡的,但並不像使用正則表達式試圖「修復」某些東西一樣。 –

+0

由於「不要」中的非轉義引號,它不是格式正確的javascript。你能依靠你想要匹配的鍵/值對嗎?如果是這樣的話,你可以用'/([^ {] *?):(。*)/''匹配所有內容,然後用'$ 1'替換:$ 2' –

+0

「,因爲」不要「」我相信這是一個錯字。 –

回答

-1

試試這個

['"]?([a-zA-Z0-9_]+)['"]?:[\s\n] 

演示:https://regex101.com/r/mM3dP2/4

編輯:

對CSS和JSON鍵

[{,;]\s*['"]?([-\w]+)['"]?:[\s\n] 

演示:https://regex101.com/r/mM3dP2/6

@SlashmanX

+0

注意:這會導致分號後出現空格的問題,例如在一些遊戲「Grand Theft Auto:San Andreas」中可能出現 – SlashmanX

+0

這適用於我的示例json,但在css代碼中失敗('sample: 'blah blah background:red; blah blah'') – Luke

+0

正常這個CSS是一個值 – badboyunited