2013-01-10 40 views
0

鑑於的Javascript分裂後20個字符

string = 'Stackoverflow is awesome. It answers all my questions'; 
string = 'Stackoverflow. Q and A site'; 

我可以搞定一切之前string.split('.')[0];

句號,但我只是想這樣做,如果句號一定數目的字符否則返回後出現全面停止前的一切。

我正確地需要一個正則表達式來做到這一點,但我不知道如何。

+0

您_could_使用正則表達式,但也絕對沒有必要的。 – jahroy

回答

1

沒有必要對一個正則表達式。

你可以只是這樣做:

function trimToDot(s) { 
    var head = s.split('.')[0]; 
    return (head.length > 20) ? head : s; 
} 
+0

好的。我改變主意了。如果regex不匹配,另一個答案返回一個null值的數組。這意味着我將不得不處理這個問題。這打擊了我整個較短的代碼想法。你的函數爲我處理這個。 – jamjam

+0

我會很快同意檢查null是沒有趣味的! – jahroy

4

/^.{20,}?\./應該這樣做。 ^告訴它開始查找搜索字符串的開頭,第一個.意味着匹配任何字符,{20,}是一個量詞,意思是「至少20」,而?使匹配儘可能少(否則它會將所有內容返回到最後一個點)。最後,\.匹配一個文字點。

+0

你可以請詳細說明一下,這是使用拆分方法嗎? – jamjam

+0

使用'match'。第一個返回值將是一個包含單個元素的數組,它是您正在查找的子字符串。 –

+0

很酷的作品。謝謝。 – jamjam

1

最簡單的方法應該是

var result = string.split('.')[0].length > 20 ? string.split('.')[0] : string; 
+0

這比使用正則表達式更好(儘管這兩種方法都可行)。 – jahroy

+0

即使如此,我更喜歡正則表達式,因爲它更短。我使用節點,因此性能不像在瀏覽器中那麼大。 – jamjam

+0

@jamjam - 這是你的選擇,但我從來沒有理解爲什麼很多人認爲較短的代碼比可讀的代碼更好。 – jahroy