I am trying to use javascript\'s split to get the sentences out of a string but keep the delimiter eg !?.
So far I have
sentences = text.split(/[\\\
A slight improvement on mircealungu's answer:
string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
'...'
, '!!!'
, '!?'
etc. are included inside sentences.Try this instead:-
sentences = text.split(/[\\.!\?]/);
?
is a special char in regular expressions so need to be escaped.
Sorry I miss read your question - if you want to keep delimiters then you need to use match
not split
see this question
The following is a small addition to Larry's answer which will match also paranthetical sentences:
text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);
applied on:
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!!!"
giveth:
["If he's restin', I'll wake him up!", " (Shouts at the cage.)",
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"]
You need to use match not split.
Try this.
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);
Improving on Mia's answer here is a version which also includes ending sentences with no punctuation:
string.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g)