Javascript正则表达式-负向后看和向前看
我正在尝试将数据解析为JSON。数据如下所示:Javascript正则表达式-负向后看和向前看,javascript,regex,Javascript,Regex,我正在尝试将数据解析为JSON。数据如下所示: [{ 'Id': 1, 'FirstName': 'bob', 'LastName': '', 'Description': 'description can include escaped single quotes: \'.' }] 结果应如何: [{ "Id": 1, "FirstName": "bob", "LastName": "", "Description": "
[{
'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不支持查找。你也不能以积极的态度去做。有一种更可靠的方法可以做到这一点,而无需考虑周围环境:
var str=str=`[{
“Id”:“,
“FirstName”:“bo”,
“姓氏”:“,
“Description”:“des\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'转义单引号:\\\\\\\\\\\\\\\\\\\\
}]`;
console.log(str.replace(/(\\\\\)+(')\\+'\\+'(')/g,函数(匹配,p1,p2,p3){
返回p2?p1+“\\”:(p3?“”:匹配);
}));代码>我认为将数据存储在JavaScript变量中并使用JSON.stringify将是实现您所要做的事情的最佳方式。它将为您处理特殊字符的转义,您不必继续维护正则表达式来处理更多的场景
obj=[{'Id':1,'FirstName':'bob','LastName':'','Description':'描述可以包含转义单引号:\'.}]
str=JSON.stringify(obj)
如果您的数据是JavaScript文本,请使用。您可以尝试使用。替换(/'([^'\\]*(?:\\.[^'\\]*)*)/g,“$1”)
关于@WiktorStribi的情况如何ew@revo这失败了,因为转义的单引号被更改了。