JavaScript | Как записать слова из текста в массив, без пробелов?

JavaScript | Как записать слова из текста в массив, без пробелов?

Текст в массив слов при помощи JavaScript

Представим себе такую задачу. У нас есть текст на HTML-странице (в документе). Мы хотим получить этот текст силами JavaScript, а потом достать из текста слова и разложить их как элементы массива. Мы знаем, что слова в текстах отделяются друг от друга пробелами (минимальное требование для понимания смысла предложений).

Пусть у нас есть HTML-абзац на странице:

<p>Я люблю русский язык, хотя пока ещё этого не понял. Я хочу создать поисковую систему, но пока не знаю как.</p>

В переменную «stroka» мы получили текстовое содержимое:

let stroka = "Я люблю русский язык, хотя пока ещё этого не понял. Я хочу создать поисковую систему, но пока не знаю как."

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

 

Извлечение русских слов из любого текста — из строки JavaScript

Русское слово — это слово, которое состоит только из символов «АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя».

Из этого «набора символов» мы можем создать «класс символа» для шаблона регулярного выражения:

[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]

Сейчас это похоже на квадратные скобки массива, но это не так. Нам не хватает границ регулярного выражения:

/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]/

Класс символа говорит только об одном символе и об одном положении этого символа. Чтобы указать количество повторений положений этого символа, нужно использовать квантификаторы. Нам поможет квантификатор «+» (плюс)

/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/

Чтобы шаблон регулярного выражения не остановился на первом успешном сопоставлении, нужно указать глобальный флаг сопоставления:

/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/g

Когда регулярное выражение, созданное литерально, готово, тогда можно приступать к вызову метода сопоставления строки по этому выражению:

stroka.match(/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/g)

Результат работы:

Получили русские слова из текста в виде массива - JavaScript
Получили русские слова из текста в виде массива — JavaScript

 

Примитивное и слабое решение через метод split()

Для работы нам понадобится метод split(), который наследуется от объекта-прототипа Srtring. В метод split() нужно вызвать с одним аргументом — разделителем. В качестве разделителя мы будем использовать пробел. Кодовая конструкция будет выглядеть так:

stroka.split(" ")

Итогом выполнения операции является массив:

["Я", "люблю", "русский", "язык,", "хотя", "пока", "ещё", "этого", "не", "понял.", "Я", "хочу", "создать", "поисковую", "систему,", "но", "пока", "не", "знаю", "как."]

Мы избавились от пробелов — решили задачу! Но. Единственный минус такого быстрого преобразования заключается в том, что некоторые элементы массива (слова) имеют на конце лишний знак точки или запятой. Например:

"язык,"
"понял."
"систему,"
"как."

От лишних символов лучше всего избавляться заранее — до вызова метода split().

 

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

ECMAScriptLiving Standard https://tc39.es/ecma262/#sec-string.prototype.split

Читайте официальную документацию живого стандарта «ECMAScript«, чтобы быть в курсе последних изменений.

JavaScript | Массивы (Array)

JavaScript | Объявление массива через квадратные скобки []