разделить с помощью JavaScript - PullRequest
4 голосов
/ 12 мая 2010

ниже - это то, что я пытаюсь сделать с помощью 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 ]

11 голосов
/ 12 мая 2010
str.match(/\S[^?]*(?:\?+|$)/g)

["how are you?", "hope you are doing good"]
4 голосов
/ 12 мая 2010

Самый простой и понятный способ, который я вижу, это просто проиграть "?" и добавьте его обратно:

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. Редактировать Удален мой, Регулярное выражение С. Марк намного лучше .

2 голосов
/ 12 мая 2010

Один из вариантов - использовать регулярное выражение, например:

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

2 голосов
/ 12 мая 2010

...

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
1 голос
/ 12 мая 2010

другая идея:

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

или (на основе ответа и комментария от коби )

var str = "how are you? All right?? Hope so???";
alert(str.replace(/([\?(1,}][^\?$])/g,'$1#!#').split(' #!#'));
  //=>how are you?,All right??,Hope so???
1 голос
/ 12 мая 2010

Если JS поддерживает просмотр регулярных выражений, все, что вам нужно, это разделить на /(?<=\?)/, но, к сожалению, этого не происходит Однако вы можете очень легко получить то же поведение с помощью функции match():

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

Даст вам ["how are you?", " hope you are doing good"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...