繁体   English   中英

Javascript正则表达式-负向回顾和超前

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM