2013-08-27 65 views
20

最好的策略是將整個單詞放入具有其後續字符的數組中。javascript通過單詞逐句打破句子

例子。 這是一個驚人的句子。

Array(
[0] => This 
[1] => is 
[2] => an 
[3] => amazing 
[4] => sentence. 
) 

元素0-3會有一個後續空間,因爲一個句點成功了第4個元素。

我的話的想法是說.. 嘿,我需要你的空格字符分割這些, 然後,一旦注射了數組元素元素的寬度達到X, 打入一個新的生產線。

請gawd不要提供大量的代碼。我更願意寫我自己的,只是告訴我你會怎麼做。

+0

你的意思是.split(「」)? – peterchon

+0

我會採取在這個答案提供的方法http://stackoverflow.com/questions/4514144/js-string-split-without-removing-the-delimiters。但是對於你的情況,改變'var newstringreplaced = string.replace(/ d/gi,「,d」);'var'newstringreplaced = string.replace(/ \ s/gi,「,」);'。 **編輯:**應該建議這種方法只有在你的原始字符串沒有','時纔有用。我想這個解決方案更安全:http://stackoverflow.com/a/4514241/1417588 –

回答

24

只需使用split

var str = "This is an amazing sentence."; 
var words = str.split(" "); 
console.log(words); 
//["This", "is", "an", "amazing", "sentence."] 

,如果你有空間需要它,爲什麼你不這樣做呢? (之後使用循環)

var str = "This is an amazing sentence."; 
var words = str.split(" "); 
for (var i = 0; i < words.length - 1; i++) { 
    words[i] += " "; 
} 
console.log(words); 
//["This ", "is ", "an ", "amazing ", "sentence."] 

哦,睡得好!

+0

是的,差不多,但每個單詞末尾的空白不見了...... – cars10m

+0

@ cars10更改了答案 - 這是否修復它? – h2ooooooo

+2

@ cars10爲什麼你需要每個單詞末尾的空格?如果你想讓他們回到你連接你的字符串只是'.join('');' –

0

使用javascript split函數。

+4

請始終解釋您的答案更多不僅僅是「一句話」。即使這是現在的正確答案。 – Sergio

1

這裏是一個選項,如果你想包括在O空間和完整的(N)

var str = "This is an amazing sentence."; 
var words = []; 
var buf = ""; 
for(var i = 0; i < str.length; i++) { 
    buf += str[i]; 
    if(str[i] == " ") { 
     words.push(buf); 
     buf = ""; 
    } 
} 

if(buf.length > 0) { 
    words.push(buf); 
} 
12

試試這個

var words = str.replace(/([ .,;]+)/g,'$1§sep§').split('§sep§'); 

這將

  1. 插入標記§sep§在每個選定的分隔符之後[ .,;]+
  2. 將字符串拆分爲標記的位置,從而保留實際的分隔符。
+0

謝謝!這是一個很好的解決方案! –

4

如果你需要空格和最簡單的點。

"This is an amazing sentence.".match(/.*?[\.\s]+?/g); 

結果將是數組(這是一個驚人的句子。)

19

Ravi's answer類似,使用match,但使用字邊界\b在正則表達式來分割在字邊界:

'This is a test. This is only a test.'.match(/\b(\w+)\b/g) 

產量

["This", "is", "a", "test", "This", "is", "only", "a", "test"] 

'This is a test. This is only a test.'.match(/\b(\w+\W+)/g) 

得到

["This ", "is ", "a ", "test. ", "This ", "is ", "only ", "a ", "test."] 
+0

這是imho的最佳答案,謝謝 –

+2

這確實是最好的答案,因爲按空間分割並不能真正用於真實場景。那麼,除非你不使用標點符號,並且總是使用單個空格。 –

+0

將「不會」轉換爲「贏」和「t」。這允許收縮:str.match(/ \ b(\ w +)'?(\ w +)?\ b/g) –