JavaScript | Текст в массив предложений

JavaScript | Текст в массив предложений

У нас есть строка с текстом:

let stroka = "Хорошая погода. Красивая природа. Дует лёгкий, прохладный ветерок."

В JavaScript для работы со строками используются регулярные выражения (RegExp), которые имею очень удобный и богатый функционал для разделения. При помощи метода [Symbol.split]() мы можем сразу разделить строку в нужных местах сопоставления.

В качестве ориентира для разделения мы будем искать такие места в строке, где идёт ТОЧКА, потом какое-то количество пробелов. В общем нас интересует 2 условия. Мы будем использовать седьмое производство Утверждений (Assertion).

/ +(?<=\. +)/g[Symbol.split](stroka)

Это регулярное выражение вернёт нам массив из отдельных предложений, у которых на концах будут точки. Оно устойчиво к множественным пробелам между предложениями.

Разделили строку на массив из предложений с сохранением точек на концах - JavaScript
Разделили строку на массив из предложений с сохранением точек на концах — JavaScript

Неплохо было бы учитывать соседство с буквами. Например было бы логично слева от точки видеть строчную букву, а справа от пробела видеть заглавную букву. Но на этом задача усложнится.

Класс символа для строчных русских букв:

[а-яё]

Класс символа для заглавных русских букв:

[А-ЯЁ]

Рассуждения

/(?=\. +)|(?<=\. +)|\.*$/[Symbol.split]

 

Решение № 2

Мы рассмотрим идеальный сценарий, когда у нас между предложениями всего одна точка и всего один пробел. Исключения вроде «т. к. » мы рассматривать здесь не будем, потому что это уже индивидуальный сложный алгоритм, который требует тщательной проработки вопроса. Подобных исключений может быть много. Тут мы рассматриваем простой частый случай.

stroka.split(". ").map(i=>i.replace(/\.*$/,"."))

Видео

 

Решение № 3

Как разделить текстовую строку на предложения и положить их в массив?

На первом этапе мы воспользуемся методом split() для нашей строки. В качестве разделителя будем использовать символ точки . т.к. точка символизирует окончание предложения в тексте.

var stroka = "Хорошая погода. Красивая природа. Дует лёгкий, прохладный ветерок."
stroka.split(".")
Разделили строку по символу точки в массив - JavaScript
Разделили строку по символу точки в массив — JavaScript

 

Нам вернулся массив, но не в том виде, в котором мы бы хотели его получить. Что именно не так?

Применение разделителя полностью вырезало сам символ точки на концах предложений. Начиная со второго элемента, мы получаем предложения с пробелом в начале строки. Последний элемент массива и вовсе пустой. Нам нужно немного улучшить наше выражение и дописать недостающий функционал.

Нас точно не будут интересовать пустые строки в элементах массива. Поэтому будет справедливо от них избавиться.

На втором этапе удаляем пустые строки из массива:

stroka.split(".").filter(i=>i!="")

На третьем этапе избавляемся от пробелов в начале строки.

stroka.split(".").filter(i=>i!="").map(i=>i.replace(/^ +/,""))
Удалили пробелы в начале строк - JavaScript
Удалили пробелы в начале строк — JavaScript

На четвёртом шаге нам нужно расставить точки на концах строк, чтобы превратить их в предложения.

stroka.split(".").filter(i=>i!="").map(i=>i.replace(/^ +/,"")).map(i=>i+".")

Задача выполнена

Добавили точки на концы строк - JavaScript
Добавили точки на концы строк — JavaScript

 

Информационные ссылки

Массивы

Строки

Утверждения