2016-09-26 68 views
0

我正在Javascript環境中使用一個字符串,我最終希望通過Twitter機器人鳴叫。問題是,有時這個字符串是兩個簡短的句子,有時候是幾個非常長的句子。如何將Javascript字符串拆分爲少於140個字符的句子?

例字符串我的工作:

短:。 「胡說富與其說富」

長:。

「嗒嗒富的地段這麼多的富有一種沒辦法,這FOO可以適合一個鳴叫在這種鳴叫的字符需要製作成多個推文,實際上有189個字符。「

我也添加到開始和結束,因此結束這樣看:

簡稱:

「今天是:胡說富與其說foo。#hashtag「

我想將長於140的字符串分成幾個推文。

龍分享Tweet 1:

「今天:。廢話富的地段這麼多的富有一種沒辦法,這FOO可以適合一個鳴叫#hashtag。」

龍Tweet 2個:

「這個總重量中的人物eet需要被製作成多個推文。實際上,有189個字符。 #hashtag」

我看到它的方式,我既可以string.split()了整個字符串轉換成句子和循環通過他們構建每個鳴叫,或者我可以使用正則表達式來選擇和分裂的數組將長字符串轉換爲多個正好小於140字符的字符串

哪種方法更有效率?我認爲這將是正則表達式選項。我將如何去實現該解決方案?

+0

這是(幾乎)相同的分割的陣列成爲垃圾箱或任何其他大列表到小列表算法,因爲JS將字符串視爲只讀數組。不知道這是否會幫助您找到答案,但值得深入研究。 – ssube

+0

你對多重推文有意義多少?如果你只是將句子拆分並單獨發佈,他們在沒有完整上下文的情況下仍然有意義嗎? – BadHorsie

+0

這並不像您猜測的那麼容易 - 如果有人輸入域名('blabla.com')或電子郵件地址('john.lee @ hooker.com'),您會如何處理這些問題? ? – Jan

回答

1

甲幼稚但簡單的方法是像一個正則表達式

/.{1,140}\./g 

實施例:

text = "Lots of blah foo. So many foo. There is a no way that this foo would fit in one tweet. The characters in this tweet need to be made into a multiple tweets. In fact, there are 189 characters." 
 
m = text.match(/.{1,140}\./g) 
 

 
for (let tweet of m) 
 
    console.log(tweet, tweet.length)

+0

這是一個非常有趣的解決方案。如果有些小數點/句號不結束句子,這會打破嗎? – xd1936

+0

我使用了'text.match(/。{1,139} \。/ g)',它的工作非常出色!非常感謝 – xd1936

+0

是的,如果有像「3.14」或「Mr. Smith」或「Y.M.C.A」這樣的東西,它確實會中斷 - 這就是爲什麼我說「天真」的原因。 – georg

0
var arr = []; 
var str = "Lots of blah foo. So many foo. There is a no way that this foo would fit in one tweet. The characters in this tweet need to be made into a multiple tweets. In fact, there are 189 characters."; 
arr.push(str.substring(0, 140)); 
arr.push(str.substring(140)); 
+0

我的問題是尋找最好的方法來將字符串拆分成**句子**,而不僅僅是在140個字符銳利:) – xd1936

+0

@ xd1936基本上相同。你正在用本地'string.substring'方法分割字符串,然後用'arr.push'將數據塊存儲在數組中,並在需要時循環它。 如果你想以某種方式將它拆分成句子,你可以嘗試在字符串中搜索一個點,並且如果點出現在第140個附近,可以用點分割。 –

相關問題