我正在尝试解析一些用逗号分隔的HTML输入字符串并将其转换为javascript数组,但是在拆分带有逗号必须保留的复杂字符串时遇到了问题。
下面是一些代码来说明我可以做什么以及我想做什么:
// what i can do:
'2,5,4'.split(',') // -> ['2','5','4']
// what I want to do
'2,{"name": [2,3]}' // -> ['2',{"name": [2,3]}] // comma preserved after '[' and before ']'
' 2,{"key": "value", "key2":"value2" } ' // -> ['2',{"key": "value", "key2":"value2" }] // comma preserved after '{' and before '}'
简而言之,我想在数据结构中保留逗号
答案 0 :(得分:0)
您应该首先尝试重新格式化字符串,以便能够使用JSON解析器对其进行处理(如@melpomene在注释中所建议的那样)
例如,对于您发布的输入,您必须在打开花括号之前和关闭花括号之后删除所有双引号
var str = ' 2,"{"name": [2,3]}" ' ;
str = "["+str.replace(/\"\{/g,"{").replace(/\}\"/g,"}")+"]";
console.log(JSON.parse(str));
答案 1 :(得分:0)
您可以使用此正则表达式对负号进行分割,方法是使用负向前看以确保不在正斜括号中。
,(?![^{}]*\})
演示,https://regex101.com/r/nGmRof/2
这是演示它的javascript代码。
var str = ['2,5,4','2,{"name": [2,3]}',' 2,{"key": "value", "key2":"value2" } '];
for (i=0;i<str.length;i++) {
console.log(str[i] + " --> split into following");
str[i] = str[i].split(/,(?![^{}]*\})/);
for (j = 0; j < str[i].length; j++) {
console.log(str[i][j]);
}
console.log('\n\n');
}