[英]JavaScript Regexp to remove escaped backslashes and quotation marks in JSON
[英]Regexp: Remove quotation marks from json list
我有一個json格式的對象數組:
[
{
"name": "obj1",
"list": [
"elem1",
"elem2",
"elem3"
]
},
{
"name": "obj2",
"list": [
"elem4",
"elem5",
"elem6"
]
}
]
現在,我想構造正則表達式以使用JavaScript從“列表”中的元素周圍刪除引號。
理想的結果:
[{"name":"obj1", "list":[elem1, elem2, elem3]},
{"name":"obj2", "list":[elem4, elem5, elem6]}]
這有效,但不是純正則表達式:
var str = '[{"name":"obj1", "list":["elem1", "elem2", "elem3"]},'
+ '{"name":"obj2", "list":["elem4", "elem5", "elem6"]}]';
str = str.replace(/"list":\[[^\]]+\]/g, function (match) {
return '"list":' + match.substring(7, match.length).replace(/([^\\])"/g, '$1');
});
document.write(str);
基本上,它將過程分為兩部分:第一,找到列表子字符串;第二,找到列表子字符串。 第二,從它們中除去撇號。
您可以使用純正則表達式來實現此功能,前提是javascript支持可變長度查找,但事實並非如此。
根據MrP的建議進行編輯以允許列表元素中的轉義撇號。
如果[elem1,elem2,elem3]成為對DOM元素甚至現有變量的引用,那么也許將JSON字符串轉換為JavaScript對象,然后再替換這些字符串可能是一種更好的方法。
例如,如果它們都是DOM元素ID值,那么在將JSON字符串轉換為對象之后,您可以只執行object["list"][0] = document.getElementById(object["list"][0])
或其他任何操作對您的對象有意義。
這應該可以解決您描述的問題:
str = str.replace(/"(?=[^\[]*\])/g, '');
匹配引號后,前行會檢查前面是否有一個閉合的方括號,但在當前位置和當前位置之間沒有打開的方括號。 如果JSON格式正確,則表示左括號在當前位置之前 ,因此匹配發生在列表內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.