2012-06-27 1 views

Répondre

4

Je pris l'approche match plutôt que de scission. Il pourrait être plus strict (par exemple si une phrase se termine par ..., etc.).

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

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

+1

Vous avez à peu près à utiliser 'match', puisque JS n'a pas une option delimiter capture pour 'split'. – chaos

+0

Un bon point que j'aurais dû mentionner. – Utkanos

+0

Oui, vous pouvez utiliser split. Mais vous avez besoin d'un look-ahead (un groupe sans capture) 'text.split (/ \ b (?! [\? \. \!]) /);' – bavo

1

@Utkanos Vous idée est bonne, mais je pense que replace peut mieux:

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

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

Vous pas besoin de boucle.

+0

Je n'avais pas pensé si je descendais cette route . Vraiment merci, mais j'ai besoin de la boucle pour d'autres choses plus tard. –

+0

@wiky - J'ai réfléchi à cette méthode, mais finalement il n'y a pas d'économie de calcul car il y a quand même une boucle - dans ce cas, la boucle est le rappel itératif. – Utkanos

1

utiliser le (? = Motif) motif dans le regex préanalyse exemple

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

cela vous donnera le résultat suivant.

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

Peut aussi être divisé directement

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

donnant le même résultat

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