如何使用javascript和正则表达式替换双引号字符串中的双引号?

时间:2012-09-18 06:59:29

标签: javascript regex json

如何使用下面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",

2 个答案:

答案 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 + ")"));