得到这种类型的字符串:
var myString = '23, 13, (#752, #141), $, ASD, (#113, #146)';
我需要将其拆分为数组,并使用逗号作为分隔符,但也将(..)
转换为数组。
这是我想要的结果:[23, 13, ['#752', '#141'], '$', 'ASD', ['#113', '#146']];
我拥有庞大的数据集,因此尽可能快地使其变得非常重要。什么是最快的方式?做一些技巧RegExp功能或手动查找索引等。?
答案 0 :(得分:5)
将parens转换为括号,引用字符串,然后使用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"]]
答案 1 :(得分:2)
您可以使用RegEx
/\(([^()]+)\)|([^,()\s]+)/g
RegEx包含两部分。 首先,捕获括号内的任何内容。 第二,捕获简单值(字符串,数字)
\(([^()]+)\)
:匹配括号内的任何内容。
\(
:匹配(
文字。([^()]+)
:匹配除(
和)
以外的任何内容,并在第一个捕获的群组中添加匹配项。\)
:匹配)
文字。|
:RegEx中的OR条件([^,()\s]+)
:匹配除,
(逗号),括号(
和)
以及空格一次或多次以外的任何字符,并在第二次捕获时添加匹配组<强>演示:强>
var myString = '23, 13, (#752, #141), ASD, (#113, #146)',
arr = [],
regex = /\(([^()]+)\)|([^,()\s]+)/g;
// While the string satisfies regex
while(match = regex.exec(myString)) {
// Check if the match is parenthesised string
// then
// split the string inside those parenthesis by comma and push it in array
// otherwise
// simply add the string in the array
arr.push(match[1] ? match[1].split(/\s*,\s*/) : match[2]);
}
console.log(arr);
document.body.innerHTML = '<pre>' + JSON.stringify(arr, 0, 4) + '</pre>'; // For demo purpose only
&#13;
答案 2 :(得分:-2)
只需使用split
方法。
var str = '23, 13, (#752, #141), ASD, (#113, #146)',
newstr = str.replace(/\(/gi,'[').replace(/\)/gi,']'),
splitstr = newstr.split(',');
&#13;