Знания, которые вы приобрели, являются вашими собственными, если вы копируете и вставляете чужие знания, они вам мало помогут, они могут только помочь вам решить временную проблему (иногда вам придется потратить много времени, чтобы найти ее), и вы не можете извлечь из этого уроки, в корне решить проблему.
Кажется, некоторое время назад мой однокурсник задал мне очередной вопрос, как проверить, что пароль, введенный пользователем, должен содержать символы, цифры и специальные символы, сказал, что нашел много обычных примеров на Baidu и не смог решить проблему, поэтому я спросил Затем, он сказал мне, что я спросил вас, и я потерял дар речи в то время. Поскольку я работал над проектом, я не думал об этом какое-то время. Я сказал ему, что вы не Не пытайтесь изменить свое мнение, и я не нашел штатного решения этой проблемы. Вы не пытаетесь судить о символах, числах и специальных символах отдельно, а затем выполнять операцию И. Кроме того, из пользовательского опыта , вы можете использовать обычное суждение, чтобы дать результат, и пользовательский опыт не очень хороший.Должна быть различная оперативная информация предоставляется в соответствии с различными ситуациями пользовательского ввода.Если в составе пароля нет цифр, он предложит, что цифр нет.Если нет символов, будет подсказано, что нет символов... , Если вы чувствуете, что слишком много суждений по аналогии, вы можете Упростить процесс, если есть только два типа паролей , отсутствующий будет предложено.Если пароли содержат только один, будет предложено, чтобы пароль состоял из символов, цифр и специальных символов.
Это незримо преподало мне яркий урок, который не только игнорируется другими, но и мной игнорируется и отсутствует. Поэтому, несмотря на недавние попытки завоевать высокие позиции в области шаблонов проектирования, я решил потратить некоторое время на то, чтобы разобраться в своих обычных знаниях.
персонажи с особым смыслом
Ниже приведен лишь список часто используемых символов и моя личная их классификация.
Группировка и коллекции
-
()
: Выражение в скобках указывает на группировку -
[]
: выражение в квадратных скобках представляет набор
оператор
-
^
: если присутствует в коллекции ([]
) означает отрицание, в противном случае это локатор, начинающийся с передней границы строки для соответствия -
|
: Это означает или означает, что играть роль операции ИЛИ -
?:
: его роль заключается в том, чтобы поместить его перед первым вариантом, чтобы устранить побочный эффект, заключающийся в кэшировании связанных совпадений.
локатор
-
^
: Как упоминалось выше, он определяет переднюю границу обычных операций. -
$
: определяет заднюю границу обычной операции -
\b
: соответствует границе символа (то есть границе между символом и символом пробела)
класс символов (представляющий класс символов)
-
\d
: представляет число, и\D
, а не число -
\w
: представляет слово, а\W
, не слово -
\s
: означает пробел, и\D
, символы без пробелов -
.
: любой символ
квалификатор
Он используется для указания длины или количества совпадающих результатов.
соответствует выражению перед символом
-
+
: один или несколько раз -
*
: ноль или более раз -
?
: ноль или один раз -
{}
: количество совпадений связано со значением в скобках.если
{n}
, должно совпасть n раз; если{n,}
, то есть совпадать не менее n раз; если{n,m}
, должен соответствовать любое количество раз между n и m.
Как играть с регулярными выражениями
Регулярное использование при обработке строк может сократить объем написания нашего js-кода, оптимизировать наш код и в то же время помочь нам изучить сложные регулярные выражения в чужом исходном коде.
Ниже приведена фотография из Чжиху оКак вы выучили регулярные выражения?Картина проблемы, усвоив закономерность этой картины, вы, вероятно, сможете решить большинство проблем, с которыми сталкиваетесь.
/^\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…Перейти на этот сайт.