[英]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.