<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Регулярные выражения on JSFlow</title><link>https://jsflow.ru/docs/regexp/</link><description>Recent content in Регулярные выражения on JSFlow</description><generator>Hugo</generator><language>ru</language><atom:link href="https://jsflow.ru/docs/regexp/index.xml" rel="self" type="application/rss+xml"/><item><title>Введение в регулярные выражения</title><link>https://jsflow.ru/docs/regexp/intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/regexp/intro/</guid><description>&lt;h1 id="введение-в-регулярные-выражения"&gt;
 Введение в регулярные выражения
 &lt;a class="anchor" href="#%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Регулярное выражение&lt;/strong&gt; (RegExp) — объект, описывающий шаблон поиска в тексте. В JavaScript regex применяют для валидации ввода, извлечения полей из API-ответов и нормализации пользовательских данных. Для простой замены одной подстроки достаточно &lt;a href="https://jsflow.ru/docs/data/string/"&gt;методов строки&lt;/a&gt;; regex оправдан, когда правило повторяется или зависит от структуры текста.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="литерал-шаблонфлаги"&gt;
 Литерал &lt;code&gt;/шаблон/флаги&lt;/code&gt;
 &lt;a class="anchor" href="#%d0%bb%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d0%bb-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%84%d0%bb%d0%b0%d0%b3%d0%b8"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Самый частый способ — слэшевый литерал:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;skuPattern&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/^[A-Z]{2}-\d{2}-[A-Z0-9]+$/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;skuPattern&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;test&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;KB-01-XL&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;skuPattern&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;test&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;kb-01&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Литерал удобен, когда шаблон известен на этапе написания кода. Обратные слэши внутри литерала экранируют спецсимволы regex (не путать с экранированием в обычных строках).&lt;/p&gt;</description></item><item><title>Символьные классы и квантификаторы</title><link>https://jsflow.ru/docs/regexp/classes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/regexp/classes/</guid><description>&lt;h1 id="символьные-классы-и-квантификаторы"&gt;
 Символьные классы и квантификаторы
 &lt;a class="anchor" href="#%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b-%d0%b8-%d0%ba%d0%b2%d0%b0%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%82%d0%be%d1%80%d1%8b"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Символьный класс&lt;/strong&gt; в regex задаёт множество допустимых символов в одной позиции; &lt;strong&gt;квантификатор&lt;/strong&gt; указывает, сколько раз элемент может повторяться. Вместе они описывают форматы SKU, телефонов, почтовых индексов и полей чекаута без перечисления каждого варианта вручную.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="один-символ--и-экранирование"&gt;
 Один символ: &lt;code&gt;.&lt;/code&gt; и экранирование
 &lt;a class="anchor" href="#%d0%be%d0%b4%d0%b8%d0%bd-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb--%d0%b8-%d1%8d%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Точка &lt;code&gt;.&lt;/code&gt; совпадает с любым символом, кроме перевода строки (без флага &lt;code&gt;s&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;KB-01&amp;#39;&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;match&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;/K./&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// [&amp;#39;K-&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спецсимволы regex экранируют обратным слэшем: &lt;code&gt;\. \* \+ \? \^ \$ \| \( \) \[ \] \{ \}&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Группы, альтернация и lookahead</title><link>https://jsflow.ru/docs/regexp/groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/regexp/groups/</guid><description>&lt;h1 id="группы-альтернация-и-lookahead"&gt;
 Группы, альтернация и lookahead
 &lt;a class="anchor" href="#%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-%d0%b0%d0%bb%d1%8c%d1%82%d0%b5%d1%80%d0%bd%d0%b0%d1%86%d0%b8%d1%8f-%d0%b8-lookahead"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Группы&lt;/strong&gt; в regex изолируют фрагмент шаблона и сохраняют совпавший текст для последующего использования. &lt;strong&gt;Альтернация&lt;/strong&gt; &lt;code&gt;|&lt;/code&gt; выбирает один из вариантов; &lt;strong&gt;lookahead&lt;/strong&gt; и &lt;strong&gt;lookbehind&lt;/strong&gt; проверяют контекст без включения его в результат совпадения. Эти приёмы нужны при разборе статусов заказа, составных адресов и метаданных плейлиста.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="захватывающие-группы-"&gt;
 Захватывающие группы &lt;code&gt;(...)&lt;/code&gt;
 &lt;a class="anchor" href="#%d0%b7%d0%b0%d1%85%d0%b2%d0%b0%d1%82%d1%8b%d0%b2%d0%b0%d1%8e%d1%89%d0%b8%d0%b5-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Скобки группируют часть шаблона и нумеруют захваты слева направо:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;line&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;ord-2026-7f3a | delivered&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;re&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/^(ord-\d{4}-[a-f0-9]{4})\s*\|\s*(\w+)$/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;m&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;line&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;match&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;re&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;] &lt;span style="color:#75715e"&gt;// полное совпадение
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#75715e"&gt;// &amp;#34;ord-2026-7f3a&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;] &lt;span style="color:#75715e"&gt;// &amp;#34;delivered&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В &lt;code&gt;replace&lt;/code&gt; группы доступны как &lt;code&gt;$1&lt;/code&gt;, &lt;code&gt;$2&lt;/code&gt; или через функцию:&lt;/p&gt;</description></item><item><title>Методы RegExp и String</title><link>https://jsflow.ru/docs/regexp/methods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsflow.ru/docs/regexp/methods/</guid><description>&lt;h1 id="методы-regexp-и-string"&gt;
 Методы RegExp и String
 &lt;a class="anchor" href="#%d0%bc%d0%b5%d1%82%d0%be%d0%b4%d1%8b-regexp-%d0%b8-string"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Методы RegExp&lt;/strong&gt; (&lt;code&gt;test&lt;/code&gt;, &lt;code&gt;exec&lt;/code&gt;) и &lt;strong&gt;методы String&lt;/strong&gt; с аргументом regex (&lt;code&gt;match&lt;/code&gt;, &lt;code&gt;matchAll&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;split&lt;/code&gt;) — основной API поиска и преобразования текста. Выбор метода зависит от того, нужна ли только проверка, первое совпадение, все совпадения или замена с группами.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="regexpprototypeteststr"&gt;
 &lt;code&gt;RegExp.prototype.test(str)&lt;/code&gt;
 &lt;a class="anchor" href="#regexpprototypeteststr"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Возвращает &lt;code&gt;boolean&lt;/code&gt; — есть ли совпадение. С флагом &lt;code&gt;g&lt;/code&gt; или &lt;code&gt;y&lt;/code&gt; обновляет &lt;code&gt;lastIndex&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ORDER&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/^ord-\d{4}-[a-f0-9]{4}$/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ORDER&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;test&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;ord-2026-7f3a&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ORDER&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;test&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;invalid&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;// false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для глобального regex повторные вызовы продолжают с &lt;code&gt;lastIndex&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>