Текст в массив слов при помощи JavaScript
Представим себе такую задачу. У нас есть текст на HTML-странице (в документе). Мы хотим получить этот текст силами JavaScript, а потом достать из текста слова и разложить их как элементы массива. Мы знаем, что слова в текстах отделяются друг от друга пробелами (минимальное требование для понимания смысла предложений).
Пусть у нас есть HTML-абзац на странице:
<p>Я люблю русский язык, хотя пока ещё этого не понял. Я хочу создать поисковую систему, но пока не знаю как.</p>
В переменную «stroka
» мы получили текстовое содержимое:
let stroka = "Я люблю русский язык, хотя пока ещё этого не понял. Я хочу создать поисковую систему, но пока не знаю как."
Подходов к решению данной задачи может быть масса. Написать качественный синтаксический анализатор под все возможные языки — это очень непростая и трудоёмкая задача.
Извлечение русских слов из любого текста — из строки JavaScript
Русское слово — это слово, которое состоит только из символов «АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя».
Из этого «набора символов» мы можем создать «класс символа» для шаблона регулярного выражения:
[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]
Сейчас это похоже на квадратные скобки массива, но это не так. Нам не хватает границ регулярного выражения:
/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]/
Класс символа говорит только об одном символе и об одном положении этого символа. Чтобы указать количество повторений положений этого символа, нужно использовать квантификаторы. Нам поможет квантификатор «+» (плюс)
/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/
Чтобы шаблон регулярного выражения не остановился на первом успешном сопоставлении, нужно указать глобальный флаг сопоставления:
/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/g
Когда регулярное выражение, созданное литерально, готово, тогда можно приступать к вызову метода сопоставления строки по этому выражению:
stroka.match(/[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/g)
Результат работы:
Примитивное и слабое решение через метод split()
Для работы нам понадобится метод split(), который наследуется от объекта-прототипа Srtring. В метод split() нужно вызвать с одним аргументом — разделителем. В качестве разделителя мы будем использовать пробел. Кодовая конструкция будет выглядеть так:
stroka.split(" ")
Итогом выполнения операции является массив:
["Я", "люблю", "русский", "язык,", "хотя", "пока", "ещё", "этого", "не", "понял.", "Я", "хочу", "создать", "поисковую", "систему,", "но", "пока", "не", "знаю", "как."]
Мы избавились от пробелов — решили задачу! Но. Единственный минус такого быстрого преобразования заключается в том, что некоторые элементы массива (слова) имеют на конце лишний знак точки или запятой. Например:
"язык,"
"понял."
"систему,"
"как."
От лишних символов лучше всего избавляться заранее — до вызова метода split().
Информационные ссылки
ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-string.prototype.split
Читайте официальную документацию живого стандарта «ECMAScript«, чтобы быть в курсе последних изменений.
JavaScript | Объявление массива через квадратные скобки []