Javascript 将逗号分隔的字符串转换为嵌套数组,RegExp?
已获取此类型的字符串:Javascript 将逗号分隔的字符串转换为嵌套数组,RegExp?,javascript,arrays,regex,Javascript,Arrays,Regex,已获取此类型的字符串: var myString = '23, 13, (#752, #141), $, ASD, (#113, #146)'; 我需要将其拆分为一个以逗号作为分隔符的数组,但也需要将(..)转换为一个数组 这就是我想要的结果:[23,13,['#752','#141'],'$','ASD',['#113','#146'] 我有大量的数据集,所以尽可能快地完成它是非常重要的。最快的方法是什么?使用一些技巧RegExp函数或手动查找索引等 这里有一个jsbin:只需使用split
var myString = '23, 13, (#752, #141), $, ASD, (#113, #146)';
我需要将其拆分为一个以逗号作为分隔符的数组,但也需要将(..)
转换为一个数组
这就是我想要的结果:[23,13,['#752','#141'],'$','ASD',['#113','#146']代码>
我有大量的数据集,所以尽可能快地完成它是非常重要的。最快的方法是什么?使用一些技巧RegExp函数或手动查找索引等
这里有一个jsbin:只需使用split
方法
var str='23,13,(#752,#141),ASD,(#113,#146),
newstr=str.replace(/\(/gi,[')。replace(/\)/gi,[')),
splitstr=newstr.split(',')代码>将括号转换为括号,引用字符串,然后使用JSON.parse
:
JSON.parse('[' +
str.
replace(/\(/g, '[').
replace(/\)/g, ']').
replace(/#\d+|\w+/g, function(m) { return isNaN(m) ? '"' + m + '"' : m; })
+ ']')
> [23,13,["#752","#141"],"ASD",["#113","#146"]]
你可以使用正则表达式
/\(([^()]+)\)|([^,()\s]+)/g
正则表达式包含两个部分首先,捕获括号内的任何内容秒,捕获简单值(字符串、数字)
\([^()]+)\)
:匹配括号内的任何内容。
\(
:匹配(
文字)
([^()]+)
:匹配除(
和)
之外的任何内容一次或多次,并将匹配项添加到第一个捕获的组中
\)
:匹配)
文字
|
:或正则表达式中的条件
([^,()\s]+)
:匹配除、
(逗号)、括号(
和)
之外的任何字符,并空格一次或多次,然后将匹配项添加到第二个捕获的组中
演示:
var myString='23,13,(#752,#141),ASD,(#113,#146),
arr=[],
正则表达式=/\([^()]+)\)|([^,()\s]+)/g;
//而字符串满足正则表达式
while(match=regex.exec(myString)){
//检查匹配项是否为括号中的字符串
//然后
//用逗号分割括号内的字符串,并将其放入数组中
//否则
//只需在数组中添加字符串
arr.push(匹配[1]?匹配[1]。拆分(/\s*,\s*/):匹配[2]);
}
控制台日志(arr);
document.body.innerHTML=''+JSON.stringify(arr,0,4)+'';//仅用于演示目的
如果可能,在源代码处将字符串格式化为真实数组,并使用JSON.parse创建数组。我无法修改源代码。他说在逗号处拆分对他不起作用,因为嵌套数组。有趣的是,但在预期结果中,23
和13
应该是数字string@torazaburo在我的数据集上尝试过,显然有时$符号出现在我的字符串中。我得到意外的代币$。是否可以以某种方式将其替换为“$”或null?我更新了问题。将\w
更改为[\w$]
(#752“,#141)
应该是array@GrundyOP更新的满足$
条件的错误正则表达式。谢谢