Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式-负向后看和向前看_Javascript_Regex - Fatal编程技术网

Javascript正则表达式-负向后看和向前看

Javascript正则表达式-负向后看和向前看,javascript,regex,Javascript,Regex,我正在尝试将数据解析为JSON。数据如下所示: [{ 'Id': 1, 'FirstName': 'bob', 'LastName': '', 'Description': 'description can include escaped single quotes: \'.' }] 结果应如何: [{ "Id": 1, "FirstName": "bob", "LastName": "", "Description": "

我正在尝试将数据解析为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不支持查找。你也不能以积极的态度去做。有一种更可靠的方法可以做到这一点,而无需考虑周围环境:

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这失败了,因为转义的单引号被更改了。