用javascript分割

时间:2010-05-12 06:50:45

标签: javascript regex

下面是我试图用JavaScript做的事情。

如果我有像

这样的字符串
str = "how are you? hope you are doing good" ;

现在我想把它分开吗? (或。或!)但我不想失去“?”。相反,我想在问号之后打破字符串,这样问号就是我们拥有的第一个分段。之后呢?或/或!需要有一个\ s(空格)才能将其分成段

after splitting str what should I get is

["how are you?","hope you are doing good"]

我不确定是否可以使用Javascript split()函数完成,请帮忙。

6 个答案:

答案 0 :(得分:11)

str.match(/\S[^?]*(?:\?+|$)/g)

["how are you?", "hope you are doing good"]

答案 1 :(得分:4)

我能看到的最简单,最直接的方式就是失去“?”并将其添加回来:

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] += "?";
}

但是,通过RegExp可以有一种方法。 修改已移除我的,S.Mark's regex 更好

答案 2 :(得分:2)

...

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

答案 3 :(得分:2)

一种选择是使用正则表达式,如:

str = "how are you? hope you are doing good";
var tokens = str.split(/(\?)/)

但是这会在他们自己的标记中产生问号:how are you,?, hope you are,?, doing good

更好的选择是:

var tokens = str.match(/[^?]+\?*/g)

这也会保留多个问号:"hello??? how are you?"

答案 4 :(得分:1)

如果JS支持regexp look-behinds你所需要的只是由/(?<=\?)/分割,但不幸的是它没有。但是,您可以使用match()函数轻松获得相同的行为:

var str = "how are you? hope you are doing good";
var data = str.match(/(?!$)[^?]*\??/g);

会给你["how are you?", " hope you are doing good"]

答案 5 :(得分:1)

另一个想法:

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

或(根据kobi的答案和评论)

var str = "how are you? All right?? Hope so???";
alert(str.replace(/([\?(1,}][^\?$])/g,'$1#!#').split(' #!#'));
  //=>how are you?,All right??,Hope so???