簡體   English   中英

正則表達式:從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM