繁体   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