use*_*038 2 regex json negative-lookbehind negative-lookahead
我有一些JSON代码,格式如下:
[
{ "abc ": "d ef", "g": "h i", "jk lm no": "pq", "r st": "uvw xyz" },
{ "!1 2": " 3", "4 ": "5 6 7", " 8 ": "9 abc", "def": "hi "NAME" jk" },
...
]
Run Code Online (Sandbox Code Playgroud)
我需要在"NAME"中的引号前添加反斜杠才能正确解析此JSON.所以我需要上面的字符串看起来像这样:
[
{ "abc ": "d ef", "g": "h i", "jk lm no": "pq", "r st": "uvw xyz" },
{ "!1 2": " 3", "4 ": "5 6 7", " 8 ": "9 abc", "def": "hi \"NAME\" jk" },
...
]
Run Code Online (Sandbox Code Playgroud)
我试着用正则表达式来替换(?!({ |": |", ))"(?!( }|: "|, "))用'\\\\"',但我得到:
[
{ \"abc ": \"d ef", \"g": \"h i", \"jk lm no": \"pq", \"r st": \"uvw xyz" },
{ \"!1 2": \" 3", \"4 ": \"5 6 7", \" 8 ": \"9 abc", \"def": \"hi \"NAME\" jk" },
...
]
Run Code Online (Sandbox Code Playgroud)
请帮忙写一个正确的正则表达式.
试试这个正则表达式:
(?<![{,:] )"(?![:,]| })
Run Code Online (Sandbox Code Playgroud)

首先,我假设你的正则表达式支持lookbehind.
其次,我怎么找到你说的这个正则表达式?通常,当您构建正则表达式时,您可以构建它以匹配您想要的内容,也可以构建它以匹配您不想要的内容.我在这里使用后者.
这是匹配有效双引号的正则表达式:
(?<=[{,:] )"|"(?=[:,]| })
Run Code Online (Sandbox Code Playgroud)

演示: http ://regex101.com/r/oX4uM5
正如您在演示中看到的那样,正则表达式(让我们称之为R)不会捕获无效引号.所以我们正在寻找的正则表达式是它(特定)相反(即!R).特别是因为我们将采用相反的外观(后面)而不是内部的引用R.
所以
(?<=...) 变 (?<!...)(?=...) 变 (?!...)"|"(读它)简单地" OR "变成(" AND ")"因此最后的正则表达式在这个答案的顶部.