2012-06-27 103 views

回答

4

我把比賽方法,而不是分裂。它可能更緊張(例如,如果句子以...等結尾,那該怎麼辦)。

text.match(/\(?[A-Z][^\.]+[\.!\?]\)?(\s+|$)/g); 

http://jsfiddle.net/DepKF/1/

+1

你很可能使用'match',因爲JS沒有一個分隔符捕捉選項爲'分裂'。 – chaos

+0

我應該提到的一個好點。 – Utkanos

+0

是的,你可以使用拆分。但是你需要一個前瞻(那個沒有捕獲組) 'text.split(/ \ b(?![\?\。\!\])/);' – bavo

1

@Utkanos你的想法是好的,但我認爲replace可以更好地:

text.replace(/\(?[A-Z][^\.]+[\.!\?]\)?/g, function (sentence) { 
    output += '<p>'+ sentence + '</p>'; 
}); 

http://jsfiddle.net/juGT7/1/

您無需再次循環。

+0

我沒有想過如果沿着這條路線走下去。非常感謝,但我需要以後的其他事情循環。 –

+0

@wiky - 我確實給了這個方法一些想法,但最終沒有計算保存,因爲有一個循環 - 在這種情況下,循環是迭代回調。 – Utkanos

1

使用(?=模式)前瞻圖案在正則表達式 例如

var string = '500x500-11*90~1+1'; 
string = string.replace(/(?=[$-/:-?{-~!"^_`\[\]])/gi, ","); 
string = string.split(","); 

這會給你以下結果。

[ '500x500', '-11', '*90', '~1', '+1' ] 

也可直接拆分

string = string.split(/(?=[$-/:-?{-~!"^_`\[\]])/gi); 

給予同樣的結果

[ '500x500', '-11', '*90', '~1', '+1' ]