Вы можете анализировать свои странные входные данные с помощью ряда вложенных регулярных выражений, используя RegExp.exe c () и один String.split () .
const data = "[{Date: 2002,Entity Taking Action: Maryland Board ,Action Taken: Reprimand},{Date: 2002,Entity Taking Action: Massachusetts Board,Action Taken: Consent order because of Maryland Board},{Date: 2007,Entity Taking Action: North Carolina Medical Board,Action Taken: Consent order because of Maryland Board action},{Date: 2013,Entity Taking Action: NC Medical Board,Action Taken: Letter of concern for not reporting previous NC consent order on reactivation of NC licence}]"
const array = []
console.log ('data', data);
const regex1 = RegExp(/^\[(.*?)\]$/, 'g')
while (true) {
const rr1 = regex1.exec(data)
if (!rr1) break
const r1 = rr1[1]
const regex2 = RegExp(/{(.+?)},?/, 'g')
while (true) {
let rr2 = regex2.exec(rr1)
if (!rr2) break
const r2 = rr2[1]
const item = {}
console.log('item', r2)
const splits = r2.split(',')
for (let key in splits) {
let tagValue = splits[key]
console.log ('tagValue', tagValue)
const regex4 = RegExp(/ *(.+): *(.+) */, 'g')
while (true) {
const rr4=regex4.exec(tagValue)
if (!rr4) break
const tag = rr4[1]
const val = rr4[2]
item[tag] = val
console.log ('field', tag, val)
}
}
array.push(item)
console.log ('item', item)
}
}
console.log(JSON.stringify(array))
Самый внешний RegExp(/^\[(.*?)\]$/, 'g')
удаляет разделители []
.
Следующий RegExp(/{(.+?)},?/, 'g')
разбивает ваши {some thing},{another thing},{yet another}
данные на some thing
, another thing
и yet another
, удаляя при этом фигурные скобки {}
.
String.split превращает вашу последовательность Tag: value, Tag: value
в отдельные Tag: value
элементы.
А самый внутренний RegExp(/ *(.+): *(.+) */, 'g')
превращает эти в элементы tag
и val
.
Вы знаете, сказано, что если вы решите проблему с помощью регулярного выражения, у вас возникнут две проблемы. В этом решении используются три регулярных выражения, поэтому теперь у вас четыре проблемы. Дело в том, что синтаксический анализ регулярных выражений хрупок. Например, если в одном из ваших элементов Action Taken указано Disbarred, then thrown in federal prison
, эта дополнительная запятая приведет к поломке этого парсера.
Вы можете написать надежный парсер для этого материала. Но лучше сообщить провайдеру свои данные, которые вам нужны реальные JSON.