Начало работы с обычным
正则 是个难啃的骨头,以前看着会正则的人 感觉都好牛逼。于是工作了2年了终于鼓起勇气啃这个骨头了。 .
пример начала
Во-первых, давайте посмотрим на соответствующее представление символов. Сначала рассмотрим этот пример. Этот 🌰 должен проверить, является ли строка числом.
let regex = /^[0-9]+$/;
let number = '123';
let string = 'abc';
regex.test(number); // true
regex.test(string); // false
Может быть, многие люди использовали Baidu и Google в это время, а затем скопировали его и использовали напрямую, но ничего не может быть депонировано таким образом, поэтому давайте успокоимся и посмотрим, что означает эта закономерность.Прежде всего, нам нужно понять что это связано.
- ^ : знак вставки, совпадающий с началом строки, совпадающий с началом строки при многострочном совпадении, а иногда также обозначающий концепцию отрицания.
- $ : знак доллара, конец совпадения, совпадение конца строки в многострочном совпадении.
- {m,} означает, по крайней мере, явления.
- Эквивалентно {m} {m, m}, указывающих на возникновение m раз.
- +: Эквивалентно {1,}, указывающему по крайней мере на одно вхождение. Метод запоминания: Знак плюс означает добавление, и перед добавлением должен быть один.
- *: Эквивалент {0,}, что означает, что он появляется любое количество раз и может не появляться. Метод запоминания: посмотрите на звезды на небе, их может не быть ни одной, их может быть несколько разбросанных, и их может быть слишком много, чтобы сосчитать.
Возможно, вы пока не понимаете [0-9]. На самом деле это эквивалентно [0123456789]. В регулярных выражениях его можно сократить как [0-9]. То же самое верно для [az] и [ АЗ]. Зачем использовать обычный? Поскольку его легко писать, мы также можем его упростить. Давайте подождем и посмотрим следующие символы и подумаем, как продолжить упрощение.
Тогда мы, вероятно, можем догадаться, что это значит, от начала (^) до конца ($) 0-9([0-9]) появляется хотя бы один раз (+), так что легко понять, почему это проверка Цифры должны быть понятны.
Далее давайте рассмотрим некоторые специальные символы:
- \d равно [0-9]. Представляет одну цифру. Метод запоминания: его английский - цифра (число).
- \D равно [^0-9]. Представляет любой символ, кроме цифр.
- \w равно [0-9a-zA-Z_]. Представляет цифры, прописные и строчные буквы, а также знаки подчеркивания. Метод запоминания: w — это сокращение от слова, также известного как символ слова.
- \W равно [^0-9a-zA-Z_]. несловесные символы.
- \s это [\t\v\n\r\f]. Обозначает пробелы, включая пробелы, горизонтальные табуляции, вертикальные табуляции, новые строки, возврат каретки и переводы форм. Метод запоминания: s — первая буква пробела.
- \S равно [^ \t\v\n\r\f]. не пробел.
- , это [^\n\r\u2028\u2029]. Подстановочный знак, представляющий практически любой символ. Исключениями являются новые строки, возврат каретки, разделители строк и разделители абзацев. Как запомнить: подумайте о каждой точке в многоточии... как о заполнителе для чего-то подобного.
Хорошо, мы видим, что \d на самом деле [0-9], и вдруг поняли, что приведенный выше регуляр можно упростить:
let regex = /^\d+$/; // /^[0-9]+$/;
В это время мы, вероятно, знаем, что это является представителем, а затем проверяет, что пользователь вводится не число, не байз, напишите его за считанные минуты.
учиться по аналогии
После того, как мы поняли предыдущий пример, мы, вероятно, сможем выяснить, как реализовать проверку того, что все буквы:
let regex = /^[a-z]+$/;
let string = 'abc';
let number = '123';
regex.test(number); //false
regex.test(string);//true
Regular чувствителен к регистру, поэтому, когда мы хотим проверить буквы в верхнем регистре, это, вероятно, будет выглядеть так:
let regex = /^[A-Z]+$/;
let string = 'abc';
let STRING = 'ABC'
let number = '123';
regex.test(number); //false
regex.test(string);//false
regex.test(STRING); //true
Ну, вторую мы уже поменяли местами, а потом поменяем местами третью, то есть прописные и строчные буквы, как писать?
let regex = /^[a-zA-Z]+$/
Подсчитано, что запись здесь мы уже рассмотрели, а обычные правила, которые не очень сложны, можно написать самим.
тестовое задание
Далее, давайте рассмотрим некоторые общие требования:
Регулярно проверяйте телефон.
Сколько цифр в номере мобильного телефона, эммммм, подожди, я посчитаю 183 XXX XXX XX, пуф, 11 цифр, хорошо, когда я этого не говорил. Затем давайте проанализируем, что номера мобильных телефонов - это сначала все числа, а первым должен быть номер 1, а затем, пока 11 цифр удовлетворяются, мы четко разобрались в требованиях.Если мы используем js для его написания, как будет написано? Я напишу это здесь по желанию, может быть, есть лучший способ
const isPhone = (number) => {
const len = number.length;
if (typeof number !== 'string' || len !== 11 || number[0] !== '1') {
return false;
}
for (let i = 0; i < len; i++) {
if (isNaN(number[i])) return false;
}
return true;
}
console.log(IsPhone('18367490590')); //true
Видно как хлопотно писать js, а может быть мое решение не очень, просто напишите, а любые хорошие решения можете прокомментировать. . Отодвинься. Теперь давайте посмотрим, как это написать с помощью регулярных выражений?
let regex = /^1\d{10}$/;
Одна строка кода для этого. Это так просто, давайте проанализируем это.
- ^ соответствует в начале
- 1 Нет проблем в начале
- \d означает, что [0-9] означает, что это должно быть число
- {10} также {10, 10} означает, что [0-9] встречается 10 раз, плюс 1 означает 11 бит.
- Нет ничего плохого в совпадении в конце $. Приведенная выше строка кода сделает это. Это легко и не так уж сложно анализировать.
Регулярное письмо с подтверждением.
Я не буду писать какую-либо js-версию, желающие студенты могут попробовать написать ее самостоятельно. Давайте посмотрим, что регулярность почтового ящика должна иметь следующие требования:
- xxx@xxx.xxx
- Любой символ обязателен перед @
- Почтовые ящики имеют знак @.
- Любой символ после @
- имеют .
- , за которым следует любой символ
let regex = /^\w+@\w+\.\w+/;
Кратко проанализируйте:
- \wМы знаем, что это подчеркивание [0-9a-zA-Z_]
- + означает хотя бы одно вхождение, подобное {1,}
- @ должен быть обязательным.
- Обратите внимание, поскольку . — это специальный обычный символ, представляющий подстановочный знак, здесь нам нужна строка «.», поэтому добавьте \ для перевода
Дополнительный случай
Предыдущие примеры, вероятно, что-то сдвинули, давайте рассмотрим еще несколько примеров.
Совпадение с шестнадцатеричным значением цвета
Вероятно, что-то вроде этого:
#ffbbad #Fc01DF #FFF #ffE
Пишу:
let regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
анализировать:
В начале стоит знак #, указывающий на шестнадцатеричный символ, который можно использовать в группе символов [0-9a-fA-F]. Тогда {6} представляет 6 раз, вы можете быть немного сбиты с толку в это время.
Что это означает?Жду введения этого |концепция ветвления. Кроме того, на самом деле очень легко понять, что группа символов [0-9a-fA-F] встречается 3 раза.
- | Филиал, по сути, можно понимать как это или в программировании, которое легко понять. Ну, мы знаем или лениво, сетап вниз не выполняется, и здесь то же самое.
Возьмем другой случай:
Подтвердите соответствие гггг-мм-дд: 2018-10-20
Регулярное выражение выглядит следующим образом:
var regex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
Проанализируйте волну:
- Год \d{4}[0-9] встречается 4 раза.
- В месяце всего 12 месяцев, десятый 0 — это [1-9] месяц, а десятый 1 — это [0-2] месяц.
- День до 31 дня.Если десятый 0 - это [1-9] дней, десятый - 1, а десятый 2 - [0-9] 3. Если есть только 0 или 1.
Заключение.
Регулярность — это большой проект, вот лишь несколько простых регуляризаций, таких как ленивое сопоставление и т. д. Мы их еще не видели, и я буду потихоньку добавлять их в следующих сериях. незаконченный...