Javascript RegExp для разделения текста на предложения и сохранения разделителя
Я пытаюсь использовать javascript split, чтобы получить предложения из строки, но сохраните разделитель eg!?.
До сих пор у меня
sentences = text.split(/[\\.!?]/);
который работает, но не включает окончательную пунктуацию для каждого предложения (.!?).
Кто-нибудь знает, как это сделать?
Ответы
Ответ 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);
- Там нет необходимости для открывающей скобки в начале.
- Пунктуация типа
'...'
, '!!!'
'!?'
и т.д. включены в предложения. - Любое количество квадратных скобок и закрывающих скобок включены. [Изменение: добавлены различные закрывающие кавычки]