2017-03-20 127 views
2

我有一些文本。將字符串拆分爲基於數組長度的字

text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
     eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim 
     ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
     aliquip ex ea commodo consequat.' 

我怎麼能根據另一個數組的長度來分割它。

array = 'sed do' 

我想:

alength = array.split(" ").length; 
array2 = candidate.match('\/((?:(?:\\S+\\s){'+alength+'})|(?:.+)(?=\\n|$))\/g'); 

其中返回null。

我希望得到是:

array 2 = 'Lorem ipsum','dolor sit',...'commodo consequat' 

有我也許可以用另一個字符串的方法?

+1

*「我怎麼能根據另一個數組的長度來分割它。」* - 你的意思是,根據另一個字符串中的單詞數量? (你其他的'array'變量實際上只是一個字符串,而不是一個數組,我猜你知道,儘管它的名稱和描述是你將它當作一個字符串來對待......) – nnnnnn

回答

1

我喜歡使用正則表達式,但是一旦你開始動態構建正則表達式,事情就會開始變得混亂,所以我會考慮一種替代方法。例如,您可以將原始字符串拆分爲單個單詞,然後根據需要進行分組。易於理解和維護:

function getPhrases(text, wordsPerPhrase) { 
 
    var words = text.split(/\s+/) 
 
    var result = [] 
 
    for (var i = 0; i < words.length; i += wordsPerPhrase) { 
 
    result.push(words.slice(i, i + wordsPerPhrase).join(" ")) 
 
    } 
 
    return result 
 
} 
 

 
text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
 
     eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim 
 
     ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
 
     aliquip ex ea commodo consequat.` 
 
     
 
console.log(getPhrases(text, 9)) 
 
console.log(getPhrases(text, 5)) 
 
console.log(getPhrases(text, 2))

注意:如果你不想在你的輸出標點符號,您可以添加這樣的事情作爲你的函數的第一行:

text = text.replace(/[^a-z'\s]/gi,'') 
+0

有一點需要注意的是,一個正則表達式將對於像這樣簡單的拆分操作通常會比較慢。另外,如果你打算多次使用這個表達式,你應該預編譯它。 – Soviut

+0

@Soviut - 那麼,在顯示的輸入中,似乎有空格和換行符,因此'/ \ s + /'而不僅僅是一個非正則表達式''「'。每次函數被調用時,表達式只被使用一次以上,我認爲編譯'/ \ s + /'不需要很長時間...... – nnnnnn

+0

謝謝,這似乎符合我的需求! – rlu7732