2017-06-01 28 views
0

基本上我想從有沒有一種優雅的方式從這個數組中抽取單詞[「{test1,test2}」,「test3」,「{test4,test5}」],並將它們放在一個數組中?

["{ 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
var array = ["{ test1, test2 }", "test3", "{test4, test5}"]; 
var output = array.join(',').replace(/[^\w,]/g,'').split(','); 
+0

不錯的工作。猜猜我過分複雜了一點.. – nnnnnn

+0

其實這/ [^ \ w,]/g來自你的解決方案,呵呵 – alejandro

0

你應該把match

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

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)

也就是說,對於數組中的每個項目,首先刪除所有不是單詞字符或逗號的字符,然後分割爲逗號,然後將結果推送到輸出數組中。

相關問題