提取Javascript中的正则表达式中的文本

时间:2018-12-19 01:23:45

标签: javascript regex

在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),

3 个答案:

答案 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)