下面是我试图用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()函数完成,请帮忙。
答案 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???