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更新的满足
    $
    条件的错误正则表达式。谢谢