开发者

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???
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜