Подтвердить что ты не робот

Javascript RegExp для разделения текста на предложения и сохранения разделителя

Я пытаюсь использовать javascript split, чтобы получить предложения из строки, но сохраните разделитель eg!?.

До сих пор у меня

sentences = text.split(/[\\.!?]/);

который работает, но не включает окончательную пунктуацию для каждого предложения (.!?).

Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

Вам нужно использовать match not split.

Попробуйте это.

var str = "I like turtles. Do you? Awesome! hahaha. lol!!! What going on????";
var result = str.match( /[^\.!\?]+[\.!\?]+/g );

var expect = ["I like turtles.", " Do you?", " Awesome!", " hahaha.", " lol!!!", " What going on????"];
console.log( result.join(" ") === expect.join(" ") )
console.log( result.length === 6);

Ответ 2

Ниже приводится небольшое дополнение к ответу Ларри, который будет соответствовать также паратичным предложениям:

text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);

применяется:

text = "If he restin', I'll wake him up! (Shouts at the cage.) 
'Ello, Mister Polly Parrot! (Owner hits the cage.) There, he moved!!!"

дает,

["If he restin', I'll wake him up!", " (Shouts at the cage.)", 
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"]

Ответ 3

Попробуйте это вместо: -

sentences = text.split(/[\\.!\?]/);

? является специальным char в регулярных выражениях, поэтому его нужно экранировать.

Извините, я пропустил ваш вопрос - если вы хотите сохранить разделители, тогда вам нужно использовать match not split см. этот вопрос

Ответ 4

Небольшое улучшение мирцеалунгу ответ:

string.match(/[^.?!]+[.!?]+[\])'"'"]*/g);
  • Там нет необходимости для открывающей скобки в начале.
  • Пунктуация типа '...', '!!!' '!?' и т.д. включены в предложения.
  • Любое количество квадратных скобок и закрывающих скобок включены. [Изменение: добавлены различные закрывающие кавычки]