split with javascript
below is something I am tryin开发者_开发知识库g to do with JavaScript.
If I have string like
str = "how are you? hope you are doing good" ;
now I want to split it with ? (or . or !) but I dont want to lose the "?". Instead I want to break the string just after the question mark such a way that question mark is with the first segment that we have. also after the ? or / or ! there needs to be a \s (space) in order to break it into segments
after splitting str what should I get is
["how are you?","hope you are doing good"]
I am not sure if it can be done with Javascript split() function ,please help.
str.match(/\S[^?]*(?:\?+|$)/g)
["how are you?", "hope you are doing good"]
The easiest, most straight-forward way I can see is to just lose the "?" and add it back:
var parts, n;
parts = str.split("?");
for (n = parts.length - 2; n >= 0; --n) { // Skip the last one
parts[n] += "?";
}
if (str.charAt(str.length-1) == "?") { // If it ended with "?", add it back
parts[parts.length-1] += "?";
}
Alternately, though, there's a way via RegExp. Edit Removed mine, S.Mark's regex is so much better.
...
var str = "how are you? hope you are doing good";
var data = str.split('?');
data[0] += '?';
alert(data[0]); // result: how are you?
alert(data[1]); // result: hope you are doing good
One option is to use a regex, as in:
str = "how are you? hope you are doing good";
var tokens = str.split(/(\?)/)
but this wil result in the question marks in their own token: how are you,?, hope you are,?, doing good
A better option is:
var tokens = str.match(/[^?]+\?*/g)
This will also keep multiple question marks: "hello??? how are you?"
If JS supported regexp look-behinds all you'd need is split by /(?<=\?)/
, but unfortunately it doesn't. However you can very easily get the same behavior with the match()
function:
var str = "how are you? hope you are doing good";
var data = str.match(/(?!$)[^?]*\??/g);
Will give you ["how are you?", " hope you are doing good"]
another idea:
var str = "how are you? hope you are doing good",
strsplit = str.split('?').join('?#').split('#');
alert(strsplit) //=> how are you?, hope you are doing good
or (based on answer & comment from kobi)
var str = "how are you? All right?? Hope so???";
alert(str.replace(/([\?(1,}][^\?$])/g,'$1#!#').split(' #!#'));
//=>how are you?,All right??,Hope so???
精彩评论