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