是否有一种优雅的方式从这个数组中提取单词[" {test1,test2}"," test3"," {test4,test5}"] ,并将它们放在一个数组中?

时间:2017-06-01 02:36:09

标签: javascript arrays regex

基本上我想从

转动数组
["{ test1, test2 }", "test3", "{test4, test5}"]

["test1","test2","test3","test4","test5"]

我使用正则表达式,matchTest是保存正则表达式的变量,匹配单词并使用匹配填充此数组,并将数组固定在同一循环中。

 while (regexMatches = matchTest.exec(sourceCode)) {
   testArray.push(regexMatches[1].replace(/\W/g, " ").split(" "));
   testArray = [].concat(...testArray);
   testArray = testArray.filter(testArray => testArray != '');
 }

我这样做的方式有效,但看起来很混乱。如何改善这一点的任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

我使用.reduce()如下:

var input = ["{ test1, test2 }", "test3", "{test4, test5}"]

var output = input.reduce((acc, v) => {
  acc.push(...v.replace(/[^\w,]/g,"").split(","))
  return acc
}, [])

console.log(output)

也就是说,对于数组中的每个项目,首先删除所有不是单词字符或逗号的字符,然后用逗号分割,然后将结果推送到输出数组中。

答案 1 :(得分:3)

var array = ["{ test1, test2 }", "test3", "{test4, test5}"];
var output = array.join(',').replace(/[^\w,]/g,'').split(',');

答案 2 :(得分:0)

你应该放match



var string = '["{ test1, test2 }", "test3", "{test4, test5}"]';
var array = string.match(/\w+\d+/g);
console.log(array);