簡體   English   中英

正則表達式匹配不在數組中的逗號(括在方括號中)

[英]Regex to match commas that are not in an array (enclosed in square brackets)

我有一個對象,並希望將其表示為帶有一些附加格式的字符串。

這是我的代碼:

// stringify object and remove double quotations
let outPut = JSON.stringify(myObject).replace(/"/g, '')

// replace commas with new line character while comma is not part of an array
outPut = outPut.replace(/,/g, '\n') // this line replaces all commas

由於我的對象包含數組並且我想在括號[...]保留逗號,我需要告訴replace函數僅在逗號不在括號內時匹配。

我怎樣才能做到這一點?

示例輸入字符串:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

我需要替換除["GML", "XML"]逗號之外的所有逗號。

您可以使用以下正則表達式來匹配不在數組中的逗號:

(,)(?![^[]*\])

(關於regex101 的說明。)

這表示匹配任何逗號,如果它后跟一個右括號,則在該右括號之前有一個左括號。


JS 中的示例:

outPut = outPut.replace(/(,)(?![^[]*\])/g, '\n');

給出:

"{glossary:{title:example glossary
GlossDiv:{title:S
GlossList:{GlossEntry:{ID:SGML
SortAs:SGML
GlossTerm:Standard Generalized Markup Language
Acronym:SGML
Abbrev:ISO 8879:1986
GlossDef:{para:A meta-markup language
 used to create markup languages such as DocBook.
GlossSeeAlso:[GML,XML]}
GlossSee:markup}}}}}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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