簡體   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