正则表达式:拆分JavaScript字符串-忽略嵌套字符串和类似对象的逗号

时间:2018-11-04 15:08:35

标签: javascript regex

我正在尝试解析一些用逗号分隔的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 '}'

简而言之,我想在数据结构中保留逗号

2 个答案:

答案 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');    
}