如何使用下面JSON字符串的正则表达式在双引号内转义双引号("
)?
[{
"LDAP_ID":"a",
"LAC_NO":"1153274",
"ACTION":"VBE",
"DATE_OF_ACTION":"06-01-2006 AM 12:00:00",
"RESPONSE":"DPP",
"DEF_OBSERV":"M",
"REMARK":"visited b" s emp & rcd 1 emi",
"OPR_ID":"FCTV1",
"ACTION_TO_BE":"",
"ACTION_TO_BE_DT":"",
"AMOUNT_TOBECHG":"",
"DELEGATED_TO":"",
"BRANCH_CODE":"100",
"DISP_DATE_OF_ACTION":"06-JAN-06",
"DISP_ACTION_TO_BE_DT":"",
"SRNO":"142871",
"DELETED_FLAG":"",
"TIMESTAMP":"10-08-2012 AM 11:38:30",
"STAMPDATETIME":"2012-08-10 11:38:30"
}]
需要转义的关键字:
"REMARK":"visited b" s emp & rcd 1 emi",
答案 0 :(得分:2)
使用正则表达式无法解决此问题。你甚至可以想出一个在99%的情况下工作的,但仅此而已。
无效的JSON无效,必须由服务器端的人员修复。正则表达式并非旨在解决此类问题。你最好在服务器端修复它。
答案 1 :(得分:0)
使用正则表达式在JS中修复无效JSON的唯一方法是将其作为字符串接收,进行替换,然后将其重新评估为JSON。最后一步可能不安全。这是一个有类似问题的问题:Convert object string to JSON
所以我建议在收到之前修复JSON。无论如何,如果你不能,这里有一个正则表达式的解决方案。
正则表达式仅在值的分隔符之间运行:"和",以确保只撤消值中的双引号(已编辑)。
:\s*"[^"]*"[^"]*"\s*(,|\s*\})
以下是替换的完整代码(正则表达式已编辑):
var str = '[{ "LDAP_ID":"a", "LAC_NO":"1153274", "ACTION":"VBE", "DATE_OF_ACTION":"06-01-2006 AM 12:00:00", "RESPONSE":"DPP", "DEF_OBSERV":"M", "REMARK":"visited b" s emp & rcd 1 emi", "OPR_ID":"FCTV1", "ACTION_TO_BE":"", "ACTION_TO_BE_DT":"", "AMOUNT_TOBECHG":"", "DELEGATED_TO":"", "BRANCH_CODE":"100", "DISP_DATE_OF_ACTION":"06-JAN-06", "DISP_ACTION_TO_BE_DT":"", "SRNO":"142871", "DELETED_FLAG":"", "TIMESTAMP":"10-08-2012 AM 11:38:30", "STAMPDATETIME":"2012-08-10 11:38:30" }]'
var j = str.replace(/(:\s*"[^"]*)"([^"]*"\s*(,|\s*\}))/g, '$1\\"$2');
var json = JSON.stringify(eval("(" + j + ")"));