В Javascript у меня есть строка, которую нужно преобразовать в JSON. Я попытался преобразовать его с помощью регулярного выражения, как показано ниже, но не получил ожидаемого результата:
var testData = "{ name=xyz, \
ip=[127.0.0.1], \
machine_id=AVC_ASD_QWESF, \
sys_Properties=[{ \
Memory=4 GB, \
system_type = { \
OS=64 bit, \
processor=64 bit \
} \
}] \
}";
var testJson = '';
var testArray = testData.split(',');
testArray.forEach(function(item) {
var kvp = item.split('=');
if (kvp.length > 1) {
var key = kvp[0];
var value = kvp[1];
var value1 = '';
if (kvp.length > 2) {
value1 = kvp[2];
value1 = value1.replace(/\b[a-zA-Z0-9]/gi, function(char) {
return '"' + char;
})
value1 = value1.replace(/[a-zA-Z0-9]\b/gi, function(char) {
return char + '"';
})
value = value + '": ' + value1;
} else if (kvp.length = 2) {
value = value.replace(/\b[a-zA-Z0-9]/gi, function(char) {
return '"' + char;
})
value = value.replace(/[a-zA-Z0-9]\b/gi, function(char) {
return char + '"';
})
}
key = key.replace(/\b[a-z]/gi, function(char) {
return '"' + char;
})
testJson = testJson + key + '": ' + value + ',';
} else {
testJson = testJson + item + ",";
}
});Есть ли возможность использовать такие символы, как "." быть включенным в границу слова.
Обновлено:
Ожидаемый JSON-формат:
{
"name":"xyz",
"ip":["127.0.0.1"],
"machine_id":"AVC_ASD_QWESF",
"sys_Properties":[
{ "Memory":"4 GB",
"system_type":{
"OS:64 bit",
"processor":"64 bit"
}
}
]
}
Да, именно так мы получаем данные



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте это с помощью обратного вызова .replace:
const regex = /\s*(\w+)\s*(?==)|(=\[?)([^,{\[\]}\n]+)/g;
const str = `{ name=xyz,
ip=[127.0.0.1],
machine_id=AVC_ASD_QWESF,
sys_Properties=[{
Memory=4 GB,
system_type = {
OS=64 bit,
processor=64 bit
}
}]
}`;
const result = str.replace(regex, function(m, group1, group2, group3) {
if (group1) return `"${group1}"`; //key
else if (group2) return `${group2}"${group3}"`; // = "value"
//else return m;
});
console.info(result.replace(/\=/g, ':')
.replace(/(".+?")|\s+/g, `$1`));
//replace remaining = with colon, and optional: replace remaining whitespaceЭто было бы очень просто без пары ключ-значение ip. Я постарался сделать это простым и на последнем этапе заменил оставшийся = двоеточием. При желании мы также можем удалить оставшиеся пробелы или использовать JSON.stringify(JSON.parse(result)).
попробуй это. Я решил это, используя простое регулярное выражение.
var testData = '{ name=xyz, \
ip=[127.0.0.1], \
machine_id=AVC_ASD_QWESF, \
sys_Properties=[{ \
Memory=4 GB, \
system_type = { \
OS=64 bit, \
processor=64 bit \
} \
}] \}';
var testJson = testData.replace(/(\s)([^\s]*)(\=)/g,'"$2"$3').replace(/(\=)/g, ":").replace(/\s+/g," ").replace(/(\:)([^\:\,\}]*)(\,|\})/g,'$1"$2"$3').replace(/(\")(\[)(.*)(\])(\")/g,"$2$1$3$5$4");
console.info(JSON.parse(testJson))
Вы уверены, что можете текстовые данные только так?