Языковая политика

Общие обсуждения => Компьютеры и интернет => Topic started by: cetsalcoatle on 17 January 2026, 15:56:19

Title: Нормализация текста
Post by: cetsalcoatle on 17 January 2026, 15:56:19
Quote
function normalizeText(text) {
  return text
    .toLowerCase()
    .replace(/(^\s*[а-яa-z])|(\.\s*[а-яa-z])/g, match =>
      match.toUpperCase()
    );
}
/(^\s*[а-яa-z])|(\.\s*[а-яa-z])/g

Как это читать вообще? :what?
Title: Re: Нормализация текста
Post by: Bhudh on 17 January 2026, 17:14:11
https://ru.wikipedia.org/wiki/Регулярные_выражения (https://ru.wikipedia.org/wiki/Регулярные_выражения)

"Найти строку, которая либо (() начинается (^) с пробела (\s) в любом количестве (*), затем содержит ([]) символ из диапазонов а-я и a-z, либо ()|() начинается с символа «.» (\.), затем содержит пробел (\s) в любом количестве (*), затем содержит ([]) символ из диапазонов а-я и a-z".

По мне, во-первых, избыточно, так как ищется одна и та же подстрока, только либо в начале строки, либо после точки, во-вторых, недостаточно, так как пропускается кириллическая ё (часто забывают, что она в таблице после я находится).
Title: Re: Нормализация текста
Post by: Bhudh on 17 January 2026, 17:46:33
Проверил, оказывается, даже каретку можно в скобки заносить.
Так что правильная регулярка:

/(^|\.)\s*[a-zа-яё]/g

Буква "g" в конце означает global, поиск всех вхождений искомой подстроки в заданной строке text. С g callback в replace вызывается по массиву, без неё с первой найденной подстрокой.

Но, кстати, это выражение находит первые символы только после предложений, которые заканчиваются точкой. Если заканчивается на !, ?, … — регулярка не сработает.
Title: Re: Нормализация текста
Post by: cetsalcoatle on 17 January 2026, 18:06:22
Спасибо!  :up:
Title: Re: Нормализация текста
Post by: Bhudh on 17 January 2026, 18:47:13
А вторые лайки от кого? От автора функции normalizeText? :lol: