在Javascript中,我想从字符串中提取数组。 字符串是
var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1"
我希望优先级是括号内的文本,然后是其他由空格分隔的文本。因此,对于上面的示例,结果应为:
result[0] = "abc"
result[1] = "24 314 83 383"
result[2] = "-256"
result[3] = "sa"
result[4] = "0"
result[5] = "24 314"
result[6] = "1"
我尝试过
var pattern = /(.*?)[\s|\)]/g;
result = str.match(pattern);
但结果是:abc ,(24 ,314 ,83 ,383),(-256),sa ,0 ,(24 ,314),
答案 0 :(得分:1)
这是使用正则表达式对象和exec
的解决方案,它比使用str.match(/\w+|\((.*?)\)/g).map(e => e.replace(/^\(|\)$/g, ""))
之类的过滤括号更安全:
var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1";
var reg = /\w+|\((.*?)\)/g;
var match;
var res = [];
while (match = reg.exec(str)) {
res.push(match[1] || match[0]);
}
console.log(res);
答案 1 :(得分:1)
您可以尝试以下方法:
let str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1";
let replaced = str.replace(/(\s*\(|\))/g, '<REP>');
let arrFromStr = replaced.split('<REP>').filter(w => w.length != 0);
变量“已替换”将所有1)0个或多个空格+“(”和2)所有“)”符号替换为“”字符串。 arrFromStr从字符串创建一个数组,并用“”将其拆分。然后我们检查数组的元素是否为空。
答案 2 :(得分:0)
尝试一下:
var str = "abc (24 314 83 383)(-256)sa 0 (24 314) 1"
var pattern = /\((.*?)\)|\s?(\S+)\s?/g;
var result = str.match(pattern).map(v => v.trim().replace(/^\(|\)$/g, ''));
console.log(result)