Как учиться регулярно (попрощаться с копированием и вставкой)

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

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

Кажется, некоторое время назад мой однокурсник задал мне очередной вопрос, как проверить, что пароль, введенный пользователем, должен содержать символы, цифры и специальные символы, сказал, что нашел много обычных примеров на Baidu и не смог решить проблему, поэтому я спросил Затем, он сказал мне, что я спросил вас, и я потерял дар речи в то время. Поскольку я работал над проектом, я не думал об этом какое-то время. Я сказал ему, что вы не Не пытайтесь изменить свое мнение, и я не нашел штатного решения этой проблемы. Вы не пытаетесь судить о символах, числах и специальных символах отдельно, а затем выполнять операцию И. Кроме того, из пользовательского опыта , вы можете использовать обычное суждение, чтобы дать результат, и пользовательский опыт не очень хороший.Должна быть различная оперативная информация предоставляется в соответствии с различными ситуациями пользовательского ввода.Если в составе пароля нет цифр, он предложит, что цифр нет.Если нет символов, будет подсказано, что нет символов... , Если вы чувствуете, что слишком много суждений по аналогии, вы можете Упростить процесс, если есть только два типа паролей , отсутствующий будет предложено.Если пароли содержат только один, будет предложено, чтобы пароль состоял из символов, цифр и специальных символов.

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

персонажи с особым смыслом

Ниже приведен лишь список часто используемых символов и моя личная их классификация.

Группировка и коллекции

  • (): Выражение в скобках указывает на группировку
  • []: выражение в квадратных скобках представляет набор

оператор

  • ^: если присутствует в коллекции ([]) означает отрицание, в противном случае это локатор, начинающийся с передней границы строки для соответствия
  • |: Это означает или означает, что играть роль операции ИЛИ
  • ?:: его роль заключается в том, чтобы поместить его перед первым вариантом, чтобы устранить побочный эффект, заключающийся в кэшировании связанных совпадений.

локатор

  • ^: Как упоминалось выше, он определяет переднюю границу обычных операций.
  • $: определяет заднюю границу обычной операции
  • \b: соответствует границе символа (то есть границе между символом и символом пробела)

класс символов (представляющий класс символов)

  • \d: представляет число, и\D, а не число
  • \w: представляет слово, а\W, не слово
  • \s: означает пробел, и\D, символы без пробелов
  • .: любой символ

квалификатор

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

соответствует выражению перед символом

  • +: один или несколько раз

  • *: ноль или более раз

  • : ноль или один раз

  • {}: количество совпадений связано со значением в скобках.

    если{n}, должно совпасть n раз; если{n,}, то есть совпадать не менее n раз; если{n,m}, должен соответствовать любое количество раз между n и m.

Как играть с регулярными выражениями

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

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

regular

/^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*\s*$/

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

regexper(это первое, что мне попалось)

Regulex(Это тот, который я часто использую сейчас)

RegExr(Эта функция очень мощная, она очень полезна для изучения регулярки, если вы учите регулярку, настоятельно рекомендуется)

Как использовать js

Regular — очень мощный метод запроса и замены строк.

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

В JavaScript мы используемRegExpсоздать объект для реализации регулярного выражения.

основное определение

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

Форма выглядит следующим образом:

regExp = new RegExp('pattern', 'flag');

// 或者
regExp = /pattern/gmi

Есть 5 типов обычных модификаторов:

  • g: все совпадающие случаи, без него только один совпадающий случай
  • i: игнорировать регистр символов
  • m: поддерживает несколько строк
  • u: Поддержка Юникода
  • y: строгий режим (возвращает результат сопоставления после указанной позиции)

Некоторые методы обычных объектов

regexp.test(str)

testметод возвращает истину/ложь

let str = "Hello world!";
let regexp = /hello/i;
console.log(regexp.test(str));
regexp.exec(str)

Поскольку этот метод не прост в использовании, он используется редко.

let str = "Hello world!";
let regexp = /l(o)/ig; // 如果用exec返回所有的的匹配结果需要加上 ‘g’ 修饰符
let matchOne = regexp.exec(str);
console.log(matchOne[0]); // lo
console.log(matchOne[1]); // o
console.log(matchOne.index); // 3
console.log(matchOne.input); // Hello world!
console.log(matchOne.lastIndex); // 5

Возвращает ноль, если совпадений нет

Строка в js может использовать обычные методы

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

str.search()

如果有匹配结果,返回第一个匹配结果的首字符位置;否则,返回 `-1`。

let str = "Hello world!";
regexp = /o/i;
str.search(regexp); // 4

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

str.match(str|reg)

let str = "Hello world!";
regexp = /o/i;
let result = str.match(regexp);

console.log(result[0]); // o
console.log(result.index); // 4
console.log(result.input); // Hello world!

мы обнаруживаемstr.match()использование иregexp.exec()Возвращаемые результаты те же.На самом деле, базовая реализация matchregexp.exec(), используйте то же самое, обратите внимание на модификаторg.

str.split(reg|substr, limit)

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

let str = 'Hello world, my   name  is lzb.'
let regexp = /\s+/i;
str.split(regexp); // ["Hello", "world,", "my", "name", "is", "lzb."]
str.split(regexp, 3) //  ["Hello", "world,", "my"]

Второй параметр в этом строковом методе ограничивает длину возвращаемого массива результатов.

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

str.replace(str|reg, str|func)

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

let str = 'Hello world, my   name  is lzb.'
let regexp = /[.,\/#!$%\^&\*;:{}=\-_`~()]/g;
str.replace(regexp, ''); // "Hello world my   name  is lzb"

或者

let str = 'Hello world, my   name  is lzb.'
let regexp = /[^\w\s|-]/g;
str.replace(regexp, ''); // "Hello world my   name  is lzb"

Затем, затем используйте вышеstr.split()Метода достаточно, или некоторые студенты могут подумать о следующих методах:

let str = 'Hello world, my   name  is u-lzb.'
let regexp = /[^\w]+/g;
str.split(regexp); // ["Hello", "world", "my", "name", "is", "u", "lzb", ""]

Этот метод не рекомендуется, проблема очевидна, поэтому я не буду здесь говорить больше.

Мы обнаружили, что есть два способа очистки специальных символов в приведенной выше строке, эти два метода не являются хорошими или плохими, и каждый из них имеет свои преимущества. Если мы поместим строку вwork_up, call&apply,::arg,a=b… рассматриваются как специальные слова, нам нужен первый метод; если нам нужны только обычные слова, мы можем использовать второй метод.

Если вторым аргументом является func, вот пример, в котором первая буква слова в строке заглавная:

let str = 'hello world';
str.replace(/\b\w+\b/g, (word) => word.substring(0,1).toUpperCase() + word.substring(1) );

строка такжеlength,indexOf,concat,toLowerCase,toUpperCaseМетоды и т. д. не будут здесь описываться один за другим.

рекомендовать

Если вам нравятся вопросы по коду, вы можете перейти наwoohoo.hacker rank.com/domains/reg…Перейти на этот сайт.

GitHub.com/Лу Чжэньбанг/…