Этот урок действительно научил меня регулярным выражениям

регулярное выражение

Этот урок действительно научил меня регулярным выражениям

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

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

Оригинальный адрес: https://refrf.shreyasminocha.me/

Для получения дополнительных статей вы можете подписаться на мой WeChat: Брат Ю пишет python

1. Введение

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

Регулярное выражение — это строка символов, определяющая шаблон поиска.

Регулярные выражения в основном используются в следующих сценариях:

  • проверка ввода
  • Операции поиска и замены
  • Расширенные операции со строками
  • поиск файла или переименование
  • Белые и черные списки

Регулярные выражения не подходят для этих сценариев:

  • XML или HTML разбор
  • Точные даты матчей

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

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

2 Основы

Регулярные выражения обычно форматируются как/<rules>/<flags>, обычно опускается для краткости/<flags>. Мы подробно обсудим флаги в следующей главе.

Давайте начнем с/p/gЭто регулярное выражение запускается. Сейчас, пожалуйста/gфлаг считается фиксированным.

  • /p/g

Как мы можем видеть,/p/gСоответствует всем символам p нижнего регистра.

Уведомление

По умолчанию регулярные выражения чувствительны к регистру.

Экземпляры шаблонов регулярных выражений, обнаруженные во входной строке, называются «совпадениями».

  • /pp/g

3 группы символов

Может соответствовать символу из набора символов.

  • /[aeiou]/g

[aeiou]/gСоответствует всем гласным во входной строке.

Вот еще один пример:

  • /p[aeiou]t/g

Мы сопоставляем букву p, за которой следует гласная, за которой следует t.

Существует более интуитивно понятный ярлык, который соответствует символу в непрерывном диапазоне.

  • /[a-z]/g

предупреждать

выражение/[a-z]/gСовпадение только с одним символом. В приведенном выше примере у каждого символа есть отдельное совпадение. Не вся строка совпадает.

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

  • /[A-Za-z0-9_-]/g

наше регулярное выражение/[A-Za-z0-9_-]/gСовпадение с символом, который должен быть (как минимум) одним из следующих символов:

  • A-Z
  • a-z
  • 0-9
  • _или-

Мы также можем «отрицать» эти правила:

  • /[^aeiou]/g

/[aeiou]/gи/[^aeiou]/gЕдинственная разница в том, что ^ стоит сразу после открывающей скобки. Его цель — «отменить» правила, определенные в скобках. Это значит:

соответствует любому символу, кроме a, e, i, o и u

3.1 Пример

недопустимые символы имени пользователя

  • /[^a-zA-Z_0-9-]/g

указанный персонаж

/[A-HJ-NP-Za-kmnp-z2-9]/g

4 персонажа побега

Экранирование символов — это сокращенные выражения для некоторых распространенных классов символов.

4.1 Цифровые символы\d

Побеги\dУказывает сопоставление числовых символов 0-9. Эквивалентно[0-9].

  • /\d/g(Пожалуйста, внимательно прочитайте здесь)
regular_expression_10-fs8.png
regular_expression_10-fs8.png
  • /\d\d/g
regular_expression_11-fs8.png
regular_expression_11-fs8.png

\Dда\dНа обороте эквивалент[^0-9].

  • /\D/g
regular_expression_12-fs8.png
regular_expression_12-fs8.png

4.2 Слово персонажей\w

Побеги\wСопоставьте символы слова. включают:

  • строчные буквы а-я
  • Заглавные буквы A-Z
  • Числа 0-9.
  • подчеркивать _

Эквивалент [a-zA-Z0-9_]

  • /\w/g
regular_expression_13-fs8.png
regular_expression_13-fs8.png
  • /\W/g
regular_expression_14-fs8.png
regular_expression_14-fs8.png

4.3 Пробелы\s

Побеги\sСовпадение с пробелами. Точный набор совпадающих символов зависит от механизма регулярных выражений, но большинство из них включают как минимум:

  • космос
  • с разделителями табуляции\t
  • Входить\r
  • новая линия\n
  • Изменять\f

Другие могут включать вертикальные вкладки (\v). Механизмы самораспознавания Unicode обычно соответствуют всем символам в категории разделителей. Впрочем, технические детали обычно не важны.

  • /\s/g
regular_expression_15-fs8.png
regular_expression_15-fs8.png
  • /\S/g(Заглавные буквы)
regular_expression_16-fs8.png
regular_expression_16-fs8.png

4.4 Любой персонаж.

Однако это не типичный побег персонажа..Вы можете сопоставить любой символ. (Кроме перевода строки \n-, модификатором dotall может быть перевод строки \n)

  • /./g
regular_expression_17-fs8.png
regular_expression_17-fs8.png

5 Побег

В регулярных выражениях некоторые символы имеют особое значение, которое мы рассмотрим в этой главе:

  • |
  • {,}
  • (,)
  • [,]
  • ^, $
  • +, *, ?
  • \
  • .Только в буквальном классе персонажа.
  • -: иногда является специальным символом в классе символов.

Если мы хотим сопоставить эти символы буквально, мы можем добавить к этим символам префикс\«Убежать» от них.

  • /\(paren\)/g
regular_expression_18-fs8.png
regular_expression_18-fs8.png
  • /(paren)/g
regular_expression_19-fs8.png
regular_expression_19-fs8.png
  • /example\.com/g
regular_expression_20.png
regular_expression_20.png
  • /example.com/g
regular_expression_21.png
regular_expression_21.png
  • /A\+/g
regular_expression_22-fs8.png
regular_expression_22-fs8.png
  • /A+/g
regular_expression_23-fs8.png
regular_expression_23-fs8.png
  • /worth \$5/g
regular_expression_24-fs8.png
regular_expression_24-fs8.png
  • /worth $5/g
regular_expression_25-fs8.png
regular_expression_25-fs8.png

5.1 Примеры

Встроенные комментарии JavaScript

  • /\/\/.*
regular_expression_26-fs8.png
regular_expression_26-fs8.png

Подстрока, окруженная звездочками

  • /*[^\*]*\*
regular_expression_27-fs8.png
regular_expression_27-fs8.png

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

6 комплектов

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

  • Соответствие извлеченного подмножества
  • Повторите группу любое количество раз
  • Ссылка на ранее совпавшую подстроку
  • улучшить читаемость
  • разрешить сложные замены

В этой главе мы узнаем, как работают группы, а в последующих главах будет больше примеров.

6.1 Группы захвата

Группа захвата обозначена (...). Ниже приведен пример иллюстрации:

  • /a(bcd)e/g
regular_expression_28-fs8.png
regular_expression_28-fs8.png

Группы захвата позволяют извлекать частичные совпадения.

  • /\{([^{}]*)\}/g
regular_expression_29-fs8.png
regular_expression_29-fs8.png

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

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

  • /a(bcd)+e/g
regular_expression_30-fs8.png
regular_expression_30-fs8.png

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

  • /(\d\d\d\d)-W(\d\d)/g
regular_expression_31-fs8.png
regular_expression_31-fs8.png

6.2 Возврат

Возврат позволяет ссылаться на ранее захваченные подстроки.

Чтобы соответствовать первой группе, вы можете использовать\1Второй набор сопоставления может быть использован\2,Так далее и тому подобное…

  • /([abc])×\1×\1/g
regular_expression_32-fs8.png
regular_expression_32-fs8.png

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

  • /[abc][abc][abc]/g
regular_expression_33-fs8.png
regular_expression_33-fs8.png
  • /[abc]\1\1/g
regular_expression_34-fs8.png
regular_expression_34-fs8.png

Вот пример, демонстрирующий распространенный вариант использования:

  • /\w+([,|])\w+\1\w+/g
regular_expression_35-fs8.png
regular_expression_35-fs8.png

Этого нельзя достичь с помощью повторяющихся классов символов.

  • /\w+[,|]\w+[,|]\w+/g
regular_expression_36-fs8.png
regular_expression_36-fs8.png

6.3 Группы без захвата

Не захватывающие группы очень похожи на захватывающие группы, за исключением того, что они не создают «захват». Вместо этого это берет форму (?: ...)

Группы без захвата часто используются с группами захвата. Возможно, вы пытаетесь извлечь какую-то часть совпадения, используя группы захвата. Хотя вы можете захотеть использовать группу, не нарушая порядок захвата, вам следует использовать группу без захвата.

6.4 Примеры

параметры строки запроса

  • /^\?(\w+)=(\w+)(?:&(\w+)=(\w+))*$/g
regular_expression_37-fs8.png
regular_expression_37-fs8.png

Мы сопоставляем первый набор пар ключ-значение по отдельности, так как это позволяет нам использовать разделитель & как часть повторяющейся группы.

(Основные) HTML-теги

Как правило, не используйте регулярные выражения для соответствия XML/HTML. Тем не менее, я все же приведу соответствующий пример:

  • /<([a-z]+)+>(.*)<\/\1>/gi
regular_expression_38-fs8.png
regular_expression_38-fs8.png

Имя

Находить:\b(\w+) (\w+)\b

заменять:1

В операциях по замене часто используется2; использование захвата\1, \2

перед заменой

John Doe
Jane Doe
Sven Svensson
Janez Novak
Janez Kranjski
Tim Joe

после замены

Doe, John
Doe, Jane
Svensson, Sven
Novak, Janez
Kranjski, Janez
Joe, Tim

Возврат и комплексные числа

Находить:\bword(s?)\b

заменять:phrase$1

перед заменой

This is a paragraph with some words.

Some instances of the word "word" are in their plural form: "words".

Yet, some are in their singular form: "word".

после замены

This is a paragraph with some phrases.

Some instances of the phrase "phrase" are in their plural form: "phrases".

Yet, some are in their singular form: "phrase".

7 повторов

Повторение — это мощная и распространенная функция регулярных выражений. Существует несколько способов представления повторения в регулярных выражениях.

7.1 Опции

Можем ли мы его использовать? Установите порцию на выбор (0 или 1 раз).

  • /a?/g
regular_expression_39-fs8.png
regular_expression_39-fs8.png

другой пример:

  • /https?/g
regular_expression_40-fs8.png
regular_expression_40-fs8.png

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

  • /url: (www\.)?example\.com/g
regular_expression_41-fs8.png
regular_expression_41-fs8.png

7.2 Ноль или более раз

Если мы хотим сопоставить ноль или более токенов, мы можем использовать * в качестве суффикса.

  • /a*/g
regular_expression_42-fs8.png
regular_expression_42-fs8.png

Наше регулярное выражение соответствует даже пустой строке.

7.3 Один или несколько раз

Если мы хотим сопоставить 1 или более токенов, мы можем использовать + в качестве суффикса.

  • /a+/g
regular_expression_43-fs8.png
regular_expression_43-fs8.png

7.4 Точно х раз

Если мы хотим сопоставить конкретный токен ровно x раз, мы можем добавить суффикс {x}. Функционально это эквивалентно копированию и вставке тега x раз.

  • /a{3}/g
regular_expression_44-fs8.png
regular_expression_44-fs8.png

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

  • /#[0-9A-F]{6}/g
regular_expression_45-fs8.png
regular_expression_45-fs8.png

Здесь токен {6} применяется к набору символов [0-9A-F].

7.5 Между минимальным и максимальным заказами

Если мы хотим сопоставить конкретный токен между min и max, мы можем добавить после этого токена{min,max}.

  • /a{2,4}/g
regular_expression_46-fs8.png
regular_expression_46-fs8.png

предупреждать

{min,max}Не ставьте пробел после запятой.

7.6 Минимум х раз

Если мы хотим сопоставить конкретный токен хотя бы x раз, мы можем добавить {x,} после токена. Аналогичен {min, max}, за исключением того, что нет верхнего предела.

  • /a{2,}/g
regular_expression_47-fs8.png
regular_expression_47-fs8.png

Жадный режим Notes 7.7

Регулярные выражения по умолчанию используют жадный режим. В жадном режиме будет найдено как можно больше символов.

  • /a*/g
regular_expression_48-fs8.png
regular_expression_48-fs8.png
  • /".*"/g
regular_expression_49-fs8.png
regular_expression_49-fs8.png

После **операторов повторения (?, *, +, ...)** добавить, что может сделать сопоставление "ленивым".

  • /".*?"/g
regular_expression_50-fs8.png
regular_expression_50-fs8.png

Здесь это также можно сделать с помощью[^"]заменять. (это лучшая практика).

  • /"[^"]*"/g
regular_expression_51-fs8.png
regular_expression_51-fs8.png

Лень означает остановку, как только условие выполняется, а жадность означает остановку только тогда, когда условие больше не выполняется.

-Andrew S on StackOverflow

  • /<.+>/g
regular_expression_52-fs8.png
regular_expression_52-fs8.png
  • /<.+?>/g
regular_expression_53-fs8.png
regular_expression_53-fs8.png

7.8 Примеры

биткойн-адрес

  • /([13][a-km-zA-HJ-NP-Z0-9]{26,33})/g(Думая: {26,33}?)
regular_expression_54-fs8.png
regular_expression_54-fs8.png

YouTube видео

  • /(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?.*?v=([^&\s]+).*/gm
regular_expression_55-fs8.png
regular_expression_55-fs8.png

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

8 попеременно

Альтернативный позволяет сопоставить одну из нескольких фраз. Это более мощно, чем группы символов, ограниченных одним символом.

Используйте символ трубы|Чтобы различать несколько фраз

  • /foo|bar|baz/g
regular_expression_56-fs8.png
regular_expression_56-fs8.png

Соответствует одному из foo, bar и baz.

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

  • /Try (foo|bar|baz)/g
regular_expression_57-fs8.png
regular_expression_57-fs8.png

За try следует один из foo, bar и baz.

Совпадение чисел от 100 до 250:

  • /1\d\d|2[0-4]\d|250/g
regular_expression_58-fs8.png
regular_expression_58-fs8.png

Это можно использоватьRegex Numeric Range Generatorгенерация инструмента.

пример

шестнадцатеричный цвет

Давайте рассмотрим пример улучшенного сопоставления цветов перед шестнадцатеричным кодом.

  • /#[0-9A-F]{6}|[0-9A-F]{3}
regular_expression_59-fs8.png
regular_expression_59-fs8.png

[0-9A-F]{6}разместить[0-9A-F]{3}спереди, это очень важно. в противном случае:

  • /#([0-9A-F]{3}|[0-9A-F]{6})/g
regular_expression_60-fs8.png
regular_expression_60-fs8.png

намекать

Механизм регулярных выражений чередует попытки слева направо.

римские цифры

  • /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/g
regular_expression_61-fs8.png
regular_expression_61-fs8.png

9 модификатор

Модификатор позволяет нам разделить регулярное выражение в другой «режим».

модификатор/pattern/задняя часть.

Разные движки поддерживают разные модификаторы. Здесь мы обсуждаем только самые распространенные модификаторы.

9.1 Глобальный модификатор (g)

До сих пор во всех примерах устанавливался глобальный модификатор. Если вы не включите глобальные модификаторы, регулярное выражение не будет больше соответствовать символам после первого.

  • /[aeiou]/g
regular_expression_62-fs8.png
regular_expression_62-fs8.png
  • /[aeiou]/
regular_expression_63-fs8.png
regular_expression_63-fs8.png

Модификатор нечувствительности дела 9.2 (I)

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

  • /#[0-9A-F]{6}/i
regular_expression_64-fs8.png
regular_expression_64-fs8.png
  • /#[0-9A-F]{6}/
regular_expression_65-fs8.png
regular_expression_65-fs8.png
  • /#[0-9A-Fa-f]{6}/
regular_expression_66-fs8.png
regular_expression_66-fs8.png

9.3 Модификатор многострочного режима (m)

Ограниченная поддержка

В Ruby модификатор m предназначен для выполнения других функций.

Модификатор multiline связан с обработкой якорей при работе с «многострочными» строками, содержащими новые строки. по умолчанию,/^foo$/Соответствует только "foo".

Мы могли бы захотеть, чтобы он также соответствовал foo в одной строке многострочной строки.

мы принимаем"bar\nfoo\nbaz"Например:

bar
foo
baz

Без модификатора m приведенная выше строка будет рассматриваться как одна строка.bar\nfoo\nbaz, регулярное выражение^foo$Не удалось сопоставить символы.

С модификатором m приведенная выше строка будет рассматриваться как 3 строки.^foo$Может соответствовать средней линии.

9.4 Модификатор(ы) Dot-all

Ограниченная поддержка

JavaScript до ES2018 не поддерживает этот модификатор. Ruby также не поддерживает этот модификатор, вместо этого он обозначается m.

.Обычно соответствует любому символу, кроме новой строки. Он также может соответствовать новому модификатору нью-модификатора.

10 якорей

Сам якорь ни к чему не подходит. Однако они ограничивают места появления совпадений.

Вы можете поставить якорь как «невидимый персонаж».

10.1 Начало линии^

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

  • /^p/g
regular_expression_67-fs8.png
regular_expression_67-fs8.png

10.2 Окончания строк

вставить в конец регулярного выражения$, аналогично началу строки. Вы можете думать об этом всегда как о совпадении невидимого символа в конце строки.

  • /p$/g
regular_expression_68-fs8.png
regular_expression_68-fs8.png

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

  • /^p$/g
regular_expression_69-fs8.png
regular_expression_69-fs8.png

Давайте рассмотрим пример из повторения и добавим две привязки в конце регулярного выражения.

  • /^https?$/g
regular_expression_70-fs8.png
regular_expression_70-fs8.png

Без этих двух якорей,http/2иshttpтакже будет соответствовать.

10.3 Границы слов\b

Граница слова — это позиция между символом и символом, не являющимся словом.

якорь границы слова\b, воображаемый невидимый символ, который существует между совпадающим символом и символом, не являющимся словом.

  • /\bp/g
regular_expression_71-fs8.png
regular_expression_71-fs8.png

намекать

символы включаютa-z, A-Z, 0-9, и_.

  • /\bp\b/g
regular_expression_72-fs8.png
regular_expression_72-fs8.png
  • /\bcat\b/g
regular_expression_73-fs8.png
regular_expression_73-fs8.png

Существует также неразрушающий граничный якорь\B.

Как следует из названия, он соответствует всему, кроме границ слов.

  • /\Bp/g
regular_expression_74-fs8.png
regular_expression_74-fs8.png
  • /\Bp\B/g
regular_expression_75-fs8.png
regular_expression_75-fs8.png

намекать

^…$и\b…\bявляются общими шаблонами, и вам почти всегда нужны эти 2, чтобы предотвратить случайные совпадения.

10.4 Примеры

конечный пробел

  • /\s+$/gm
regular_expression_76-fs8.png
regular_expression_76-fs8.png

заголовок уценки

  • /^## /gm
regular_expression_77-fs8.png
regular_expression_77-fs8.png

Без анкеров:

  • /## /gm
regular_expression_78-fs8.png
regular_expression_78-fs8.png

11 утверждений нулевой ширины (осмотр)

Утверждения нулевой ширины можно использовать для проверки условий без сопоставления какого-либо текста.

Вы можете только видеть, не можете двигаться.

  • Утверждение Lookhead
    • положительный(?=…)
    • отрицательный(?!…)
  • Смотреть за
    • положительный(?<=…)
    • отрицательный(?<!…)

11.1 первое утверждение (lookhead)

положительный

  • /_(?=[aeiou])/g
regular_expression_79-fs8.png
regular_expression_79-fs8.png

Обратите внимание, что следующие символы не совпадают. В этом можно убедиться, посмотрев на переднюю часть.

  • /(.+)_(?=[aeiou])(?=\1)/g
regular_expression_80-fs8.png
regular_expression_80-fs8.png

Обычный двигатель в_использовал(?=[aeiou])и(?=\1)Проверять.

  • /(?=.*#).*/g
regular_expression_81-fs8.png
regular_expression_81-fs8.png

Отрицательный

  • /_(?![aeiou])/g
regular_expression_82-fs8.png
regular_expression_82-fs8.png
  • /^(?!.*#).*$/g
regular_expression_83-fs8.png
regular_expression_83-fs8.png

Если якоря нет, будет соответствовать часть без # в каждом примере.

Отрицательные прогнозные утверждения часто используются для предотвращения сопоставления определенных фраз.

  • /foo(?!bar)/g
regular_expression_84-fs8.png
regular_expression_84-fs8.png
  • /---(?:(?!---).)*---/g
regular_expression_85-fs8.png
regular_expression_85-fs8.png

11.2 Примеры

Проверка пароля

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{8,}$/

regular_expression_86-fs8.png
regular_expression_86-fs8.png

Утверждения нулевой ширины можно использовать для проверки нескольких условий.

строка в кавычках

  • /(['"])(?:(?!\1).)*\1/g
regular_expression_87-fs8.png
regular_expression_87-fs8.png

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

  • /(['"])[^'"]*\1/g
regular_expression_88-fs8.png
regular_expression_88-fs8.png

12 продвинутых примеров

JavaScript-комментарии

  • /\/\*[\s\S]*?\*\/|\/\/.*/g
regular_expression_89-fs8.png
regular_expression_89-fs8.png

[\s\S]это трюк для соответствия любому символу, включая символы новой строки. Мы избегаем модификатора dot-all, потому что нам нужно использовать.Представляет однострочный комментарий.

24 часа

  • /^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/g
regular_expression_90-fs8.png
regular_expression_90-fs8.png

айпи адрес

  • /\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b/g
regular_expression_91-fs8.png
regular_expression_91-fs8.png

Мета-теги

  • /<Example source="(.*?)" flags="(.*?)">/gm
regular_expression_92-fs8.png
regular_expression_92-fs8.png

заменять:<Example regex={/$1/$2}>

число с плавающей запятой

  • необязательный символ

  • Дополнительная целочисленная часть

  • необязательная дробная часть

  • необязательный раздел экспоненты

  • /^([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?$/g

regular_expression_93-fs8.png
regular_expression_93-fs8.png

положительное прогнозное утверждение(?=\.\d|\d)убедитесь, что это не совпадает..

цвет HSL

Целое от 0 до 360

  • /^0*(?:360|3[0-5]\d|[12]?\d?\d)$/g
regular_expression_94-fs8.png
regular_expression_94-fs8.png

процент

  • /^(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%$/g
regular_expression_95-fs8.png
regular_expression_95-fs8.png

HSL и процент

  • /^hsl\(\s*0*(?:360|3[0-5]\d|[12]?\d?\d)\s*(?:,\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%\s*){2}\)$/gi
regular_expression_96-fs8.png
regular_expression_96-fs8.png

13 Следующий шаг

Если вы хотите узнать больше о регулярных выражениях и о том, как они работают:

Спасибо за чтение!添加微信:雨哥写 python