[英]Javascript Regex - negative lookbehind and lookahead
我正在尝试将数据解析为JSON。 数据如下所示:
[{
'Id': 1,
'FirstName': 'bob',
'LastName': '',
'Description': 'description can include escaped single quotes: \'.'
}]
结果如何:
[{
"Id": 1,
"FirstName": "bob",
"LastName": "",
"Description": "description can include escaped single quotes: \'."
}]
关键是要用双引号替换所有未转义的单引号,同时不要使用转义的引号。
我有正则表达式,它可以很好地将JSON的单引号转换为双引号,而忽略转义的单引号。
/((?!\\).{1}|^.{0,0})\'/g
问题:问题在于,对于位'LastName': ''
,它仅将第一个引号替换为“,而不是第二个...将其替换为: "LastName": "'
,这是无效的JSON。
问题:如何修改我的正则表达式以确保两个单引号都被替换? 我觉得连续两次运行string.replace
是一个肮脏的解决方案...
我认为将数据存储在JavaScript变量中并使用JSON.stringify将是实现您要执行的操作的最佳方法。 它会为您转义特殊字符,并且您不必继续维护正则表达式即可处理更多情况。
obj=[{ 'Id': 1, 'FirstName': 'bob', 'LastName': '', 'Description': 'description can include escaped single quotes: \\'.'}] str=JSON.stringify(obj)
此后,您的str将具有以下值:[{“ Id”:1,“ FirstName”:“ bob”,“ LastName”:“”,“ Description”:“描述可以包含转义的单引号:'。”}]
javascript不支持Lookbehind。 您也无法以积极的前瞻性来做到这一点。 有一种更可靠的方法可以完全不用考虑环顾四周:
var str = str = `[{ 'Id': '', 'FirstName': 'bo\\\\\\\\\\\\\\\\'b', 'LastName': '', 'Description': 'des\\\\\\\\\\\\'cription can\\\\\\\\' include \\\\\\\\\\\\\\\\'escaped\\\\'single quotes: \\\\'.' }]`; console.log(str.replace(/(\\\\\\\\)+(')|\\\\+'|(')/g, function(match, p1, p2, p3) { return p2 ? p1 + '\\\\"' : (p3 ? '"' : match); }));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.