2012-08-01 17 views
13

Sto cercando di usare scissione di javascript per ottenere le frasi di una stringa, ma mantenere il delimitatore per esempio!?.Javascript RegExp per il testo frazionamento in frasi e mantenendo il delimitatore

Finora ho

sentences = text.split(/[\\.!?]/); 

che funziona ma non include la punteggiatura finale per ogni frase (.!?).

Qualcuno sa di un modo per farlo?

+1

'? 'è anche un carattere speciale in RegExp, quindi è necessario sfuggire ad esso – rgvcorley

+3

Metacaratteri come '.' e'? 'Perdono i loro significati speciali all'interno di una classe di caratteri. Il modo corretto per abbinare un punto ('.'), un punto esclamativo ('! ') O un punto interrogativo ('? ') È' [.!?] '. –

risposta

38

è necessario utilizzare match non dividere.

Prova questo.

var str = "I like turtles. Do you? Awesome! hahaha. lol!!! What's going on????"; 
var result = str.match(/[^\.!\?]+[\.!\?]+/g); 

var expect = ["I like turtles.", " Do you?", " Awesome!", " hahaha.", " lol!!!", " What's going on????"]; 
console.log(result.join(" ") === expect.join(" ")) 
console.log(result.length === 6); 
+0

Wicked !! Molte grazie. – daktau

+1

È possibile utilizzare una spaccatura: 'text.split (?!/\ B ([?.! \ \ \]) /);' \ b dice di dividere sui confini di parola, la parte nifty è l'aspetto negativo -avanti. – bavo

+2

L'espressione regolare è errata. Se scrivo: "Frase 1. Frase 2. Frase 3", "Frase 3" viene gettata via. –

5

Prova a modificare: -

sentences = text.split(/[\\.!\?]/); 

? è un carattere speciale nelle espressioni regolari così bisogno di essere sfuggito.

dispiace mi manca letto la tua domanda - se si desidera mantenere delimitatori allora avete bisogno di utilizzare match non split vedere this question

+2

Solo una piccola nota:? Caratteri speciali come '' non hanno bisogno di essere sfuggito all'interno di una classe di caratteri (le parentesi quadre). – JoeRocc

6

Quello che segue è una piccola aggiunta alla risposta di Larry che corrisponderà anche frasi paranthetical:

text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g); 

applicato su:

text = "If he's restin', I'll wake him up! (Shouts at the cage.) 
'Ello, Mister Polly Parrot! (Owner hits the cage.) There, he moved!!!" 

dona:

["If he's restin', I'll wake him up!", " (Shouts at the cage.)", 
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"] 
+0

Qualche idea su come regolare questo per i numeri decimali? Per esempio. "Lì, si è trasferito al 99,9% !!!" –

+1

vi siete persi la '' + dopo la classe di caratteri di punteggiatura '[.!?]', In modo da non catturare i tre esclamazioni dopo "si trasferisce". – Mogsdad