Учебные заметки — метод проверки регулярного соответствия

внешний интерфейс программист JavaScript регулярное выражение

предисловие

Regular — это особый вид объекта в js,Он может соответствовать проверке формата, необходимой для каждой сцены.,НапримерПочта,Телефонный номер,Логин пользователя,парольПодождите, кажется, что везде, при поиске или замене обычной строки, нам нужно предоставить шаблон, который представляет правила поиска или замены для сопоставления серии строк, которые соответствуют определенному синтаксическому правилу.

Ниже приводится более официальное объяснение канона:

Регулярные выражения — это шаблоны, используемые для сопоставления комбинаций символов в строке. существуетJavaScript, регулярные выражения также являются объектами. Эти шаблоны используются дляRegExpизexecиtestметод иStringизmatch,replace,searchиsplitметод.

Ближе к дому, на код!


1. Создайте регулярное выражение (есть два способа сослаться на следующее):

(1) Используйте конструктор регулярных выражений (созданный new)

let regex = new RegExp("a")

let regex = new RegExp("^[a-zA-Z]",'g') ;    //当使用引号时不必再加反斜杠’/’

let regex = new RegExp(/^[a-zA-Z]/,'gi');      //当有斜杠时就 不用再加引号 

(2) Создайте литерал (содержимое, которое необходимо сопоставить, заключено в две косые черты '//')

let regex = /ab/ ;

let regex=/^[a-zA-Z]/ ;

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

2. Параметры регулярного выражения, написанные после //, можно смешивать

персонаж правила сопоставления Пример
глобальный (аббревиатура: г) глобальное соответствие (модификаторы, примеси) /./g.test("asdsd") //true
ignoreCase (сокращение: i) соответствие всем регистрам (модификаторы, смешанные) /a/i.test("A") //true
многострочный (аббревиатура: м) Многострочное сопоставление (модификаторы, смешанное) /good/m.test("an\n good boy") //true
s В отличие от m, совпадение одной строки (модификатор, микс) /\abc\s/.test("sdf\nabc") //false
  • gГлобальные совпадения; поиск всех совпадений вместо остановки после первого совпадения
  • iсоответствовать всем случаям
  • mмногострочный; будет начинаться и заканчиваться символами (^и$) считается работающим с несколькими строками (то есть совпадающими с началом и концом каждой строки отдельно (по\nили\rsplit) вместо того, чтобы просто сопоставлять начало и конец всей входной строки.
  • sиmВместо этого совпадение одной строки
let regex=/^[a-zA-Z]/gim ;

3. Обычно используемые методы регуляризации и методы, связанные с регуляризацией строк.

(1)testМетод () определяет, соответствует ли значение в строке заданному регулярному правилу, и возвращает логическое значение.trueилиfalse.

забрать"ab"Сопоставлять ли предыдущее регулярное выражение /../, возвращать правильноtrue, не соответствует возвращениюfalse

/../.test("ab");        // true。  

(2)execМетод () извлекает указанное значение в строке и возвращает массив результатов, если найден соответствующий текст, в противном случае возвращаетnull.

регулярное выражение поиска/abc/есть ли в строкеdefaabcЕсть совпадение, вернуть совпадающее содержимое, значение индекса и полученную строку.

/abc/.exec("defaabc")       //  ["abc", index: 4, input: "defaabc"]

забрать/qqq/Вы вabcdefaabcсовпадать, возвращатьсяnull

/qqq/.exec("abcdefaabc")     // null

(3)compile()Метод используется для изменения обычного совпадающего содержимого.

будет/abc/Соответствующее содержимое изменяется на содержимое следующей строки

/abc/.compile('def’)    //  /def/

(4)split()Разделить строку на массив строк, вернуть массив

преобразовать строкуabcdот/b/серединаbразбить на массив строк

"abcd".split(/b/);       // ["a", "cd"]

(5)replace()Метод используется для замены одних символов другими символами в строке или замены строки, соответствующей регулярному выражению, возвращая строку

использовать обычный контент/\d\d\d/чтобы соответствовать строке12345abcde, замените соответствующий контент на*, и возвращает замененную строку

'12345abcde'.replace(/\d\d\d/g,'*');     //  "*45abcde"

Удалите кавычки из строки и выполните глобальный поиск', заменяется''нулевой

'12345abcde'.replace(/'/g,'');     //12345abcde

Удалить левые пробелы:

'   12666'.replace( /^\s*/, '');   //12666

Удалите пробелы справа:

'12666  '.replace(/(\s*$)/g, "")   //12666

Удалите два ведущих пробела:

'   12666  '.replace(/^\s+|\s+$/g,"")  //  12666

Также в дополнение к регулярности js также имеет метод удаления пробелов с обоих концов:

'   22  33   '.trim()    //22  33

удалить все пробелы из строки,tab, перевод страницы, перевод строки

' 12 345ab cd    e '.replace(/\s/g,'');     // "12345abcde"

(6) search()Используется для получения указанной строки в строке или строки, соответствующей регулярному выражению, возвращает индекс начальной позиции совпадающей строки, в противном случае возвращает-1, возвращает позицию

'abcdedfasdfs'.search(/d/);      // 3

Даже если это глобальное совпадение, оно будет соответствовать только первой позиции.

'abcdedfasdfs'.search(/d/g);     // 3

Если совпадения нет, вернуться-1

'abcdedfasdfs'.search(/o/g);     // -1

(7)match()метод для извлечения указанного значения в строке или поиска совпадения для одного или нескольких регулярных выражений, возвращая массив

Извлекает указанное значение и возвращает,b+относится к нескольким

"aabbbbccbbaab".match(/b+/g);     //  ["bbbb", "bb", "b"]

4. Обычные правила (обычно используемые)

Ссылаться на:developer.Mozilla.org/this-cn/docs/…

(1) Прямые символы

персонаж правила сопоставления Пример
\o NUL-символ (\u0000)
\t Символ табуляции (\u0009) /\t/.test(' ') //true
\n перевод строки, который перемещает курсор на одну позицию вниз (\u000A)
\v вертикальная вкладка (\u000B)
\f Подача формы (\u000C)
\r Enter, первый переводит курсор в начало строки (\u000D)

Наиболее часто используемые из них:\n,\t,\r, используемый для сопоставления с известными конкретными пробелами.

(2) Класс символов

класс персонажей правила сопоставления Пример
. Любой символ, кроме символа новой строки и других разделителей строк Unicode. /..../.test('1a@L') //true
\d Эквивалентно числу [0-9] /\d\d\d/.test('123') //true
\D Кроме \d, эквивалентного [^0-9] /\D\D\D/.test("aK#") //true
\w Цифры 0-9, буквы a-z и A-Z или подчеркивание, эквивалентные [a-zA-Z0-9_] /\w\w\w/.test("0aZ_") //true
\W Специальные символы, отличные от деления \w выше, эквивалентны [^a-zA-Z0-9_] /\W\W\W/.test("!@#$%^&*()") //true
\s Любой пробел Unicode, включая пробел, табуляцию, перевод страницы, перевод строки /\s\s\s/.test(' ') //true
\S любые пробелы, отличные от Unicode /\S\S\S\S\S/.test('s4*&^') //true
\ управляющий символ /^abc/.test('^abc') //true
[\b] обратный литерал

Примечание: \w и \S разные


Если вы чувствуете, что пример кода не избавляет вас от сомнений, давайте объясним использование каждого символа выше ^0^:

(1) Любой символ

об этом(.)Это может быть символ, который соответствует наибольшему содержанию, и его правило сопоставления заключается в удалении новых строк.(\n)и возврат каретки(/r)Произвольные символы, отличные от , давайте продемонстрируем это на нескольких примерах.

Тестовые письма:

/.../.test("abc");          // true

Тестовые номера:

/.../.test(123);            // true

Специальные символы:

/………../.test("!@#$%^&*()_+")     // true

(2) \d соответствует числам0~9

Тестовые письма:

/\d/.test("a");          // false

Тестовые номера:

/\d/.test(5)             //true

Специальные символы:

/\d\d\d\d\d\d\d\d\d\d\d\d\d/.test("!@#$%^&*()_+")    // false

(3) \D соответствует номерам делений0~9все персонажи(非\d)

Тестовые письма:

/\D/.test("a");          // true

Тестовые номера:

/\D/.test(5)             // false

Специальные символы:

/\D\D/.test("!@")        // true

(4) \w соответствует числам0~9,письмоa~z,A~Z, подчеркивать

Тестовые письма:

/\w/.test("a");          // true

Тестовые номера:

/\w/.test(5)             // true

Специальные символы:

/\w\w/.test("!@")        // false

(5)\Wне соответствует\w, специальный символ

Тестовые письма:

/\W/.test("a");           // false

Тестовые номера:

/\W/.test(5)              // false

Специальные символы:

/\W\W/.test("!@")         // true

(6)\sсовпадать с пробеломTabразрыв линии подачи формы

Тестовые письма:

/\s/.test("a");          // false

Тестовые номера:

/\s/.test(5)              // false

Специальные символы:

/\s/.test("@")            // false

космосTab:

/\s\s/.test("     ")       //true

(7)\Sне соответствует\sСодержание

Тестовые письма:

/\S/.test("a");           // true

Тестовые номера:

/\S/.test(5)              // true

Специальные символы:

/\S/.test("@")           // true

Вкладка «Пространство»:

/\S\S/.test("     ")      // false

(3) Обозначение области применения

диапазон соответствует правила сопоставления Пример
[...] совпадения в пределах диапазона символов /[a-z]/.test("asdfge") //true
[^...] совпадения за пределами диапазона символов /[^a-z]/.test("15432") //true
^ совпадения, начинающиеся с /^abcd/.test("abcd") //true
$ матчи, заканчивающиеся на /abd$/.test("abd") //true
\b Сопоставление границ слов нулевой ширины (с пробелами до и после или без них) /is\b/.test("this is an apple") //true
\B Не \b, то есть ни одной границы (будь то пробела до и после) "eabcdef abcde".replace(/abc\B/,"*") //"e*def abcde"

(1) [...]: соответствует любому значению в диапазоне символов в пределах своего диапазона

/[a-z]/.test("asdfge")  // true 匹配任意一个值在`[a-z]`的范围

/[0-9]/.test("sdd55588")  // true 匹配任意一个值在`[0-9]`的范围

/a[abc]a/.test('aaa')  //  true  匹配任意一个值在`[abc]`的范围

/a[abc]a/.test('aba')  //  true  匹配任意一个值在`[abc]`的范围

/a[abc]a/.test('aca')  //  true  匹配任意一个值在`[abc]`的范围

(2) [^...]: соответствует символам за пределами диапазона

/[^a-z]/.test("15432")   // true

(3) ^ : совпадения, начинающиеся с этого

/^abcd/.test("abcd")  // true

(4) $: соответствует окончанию с этим

/abd$/.test("abd")   // true

(5) \b: соответствует одной границе

обнаружитьisЕсть ли пробелы с обеих сторон, пробелы с пробелами могут быть сопоставлены, и одно совпадение

/is\b/.test("this is an apple")  // true

"th is is an apple".replace(/\bis\b/,"*")  // "th * is an apple"

"th isis an apple".replace(/\bis\b/,"*")  

(6) \B: не-\b, т. е. не одна границаобнаружитьabcНет ли пробелов с обеих сторон, одиночное совпадение

"eabcdef abcde".replace(/abc\B/,"*")     //"e*def abcde"

"e abc def abc de".replace(/abc\B/,"*")  //"e abc def abc de"

"eabcdefabcde".replace(/abc\B/,"*")      // "e*defabcde"

(4) Сопоставление групп

группировка правила сопоставления Пример
(Икс) Группировать и записывать совпадающие строки "boyboyfrinedboy".replace(/(boy){2}frined/,"*") //"* boy"
\x \x соответствует x-й группе (x), повторенной 1 раз /(abc)(def)\2/.test("abcdefdef") //true
(?:x) Только группировка, \x в это время не указывает на это /(?:abc)(?:def)(eee)\1/.test("abcdefeeeeee") //true

(1) (x): сгруппируйте и запишите совпадающие строки.

"boyboyfrinedboy".replace(/(boy){2}frined/,"*")  //"* boy"

(2) \x : \x соответствует x-й группе (x), повторенной 1 раз

/(abc)(def)\2/.test("abcdefdef")  // true

(3) (?:x): только группировка, в это время \x не будет указывать на это

/(?:abc)(?:def)(eee)\1/.test("abcdefeeeeee")  // ture

(5) Повторите сопоставление

повторение правила сопоставления Пример
x* Сопоставьте x и сопоставьте x с количеством повторений >= 0 (жадный алгоритм) abc* соответствует ab, abc, abcc, abccc
x+ сопоставить x и сопоставить x с повторениями> 0 (жадный алгоритм) abc* соответствует abc, abcc, abccc, не соответствует ab
x*? соответствует только x (без последнего символа) (нежадный алгоритм) abc*? соответствует только ab, остальные не совпадают
x+? Совпадает только x, остальные не совпадают (нежадный алгоритм) abc+? соответствует только abc, остальные не соответствуют
x{n} совпадение x повторяется >= n раз (нежадный алгоритм) (abc){2} соответствует abcabc, abcabcabcabc
x{n,m} Совпадение с x повторениями >=n, (abc){1,2} соответствует abc,abcabc, не соответствует abcabcabc

(1) x* : соответствует x и соответствует x с повторениями >= 0 (жадный алгоритм)

abc*匹配ab,abc,abcc,abccc 

(2) x+ : Сопоставьте x и сопоставьте x с повторениями > 0, минимум 1, максимум неограниченно (жадный алгоритм)

abc*匹配abc,abcc,abccc,不匹配ab 

(3) x*? : соответствует только x (исключая последний символ) (нежадный алгоритм)

abc*?只匹配ab,其他不匹配

(4) x+? : соответствует только x, остальные не совпадают (нежадный алгоритм)

abc+?只匹配abc,其他不匹配

(5) x{n}: соответствие содержимому x, повторенному >=n раз, не менее n, не более неограниченного числа (нежадный алгоритм)? эквивалентно {0,1}

(abc){2}匹配abcabc,abcabcabcabc

(6) x{n,m} : Сопоставить x повторений >=n,Закон)

(abc){1,2}匹配abc,abcabc,不匹配abcabcabc

5. Часто используемое регулярное сопоставление

(1) Номер мобильного телефона

  • Переместить сегмент номера: 134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 198

  • Раздел номера Юником: 130 131 132 145 146 155 156 166 171 175 176 185 186

  • Сегмент электрического сигнала: 133 149 153 173 174 177 180 181 189 199

  • Виртуальный оператор: 170

совпадение13*номер мобильного телефона:

/^(1)3(\d){9}$/.test(13131121111)

совпадение14*номер мобильного телефона:

/^(1)4[5-9](\d){8}$/.test(14531121989)

совпадение15*номер мобильного телефона:

/^(1)5[^4]{9}$/.test(15531121989)

совпадение16*номер мобильного телефона:

/^(1)66(\d){8}$/.test(16631121989)

совпадение17*номер мобильного телефона:

/^(1)7[0-8](\d){8}$/.test(17199121989)

совпадение18*номер мобильного телефона:

/^(1)8(\d){9}$/.test(18131121989)

совпадение19*номер мобильного телефона:

/^(1)9[8-9](\d){8}$/.test(19831121989)

Совпадение всех телефонных номеров:

/^((1)3(\d){9}$)|(^(1)4[5-9](\d){8}$)|(^(1)5[^4]{9}$)|(^(1)66(\d){8}$)|(^(1)7[0-8](\d){8}$)|(^(1)8(\d){9}$)|(^(1)9[8-9](\d){8}$)/.test(16961121989)

(2) Почтовый ящик

  • Правило 126: 6~18 символов, можно использовать буквы, цифры, символы подчеркивания, должно начинаться с буквы

  • Правило 163: 6~18 символов, можно использовать буквы, цифры, символы подчеркивания, должно начинаться с буквы Разрешить номера мобильных телефонов

  • Почтовый ящик QQ: номера 5-10

  • Правила почтового ящика Sina: 4-16 символов, английские строчные буквы, цифры, символы подчеркивания могут быть использованы, а подчеркивание не может стоять на первом месте

  • Правила почтового ящика Sohu: 4-16 цифр, английский язык, цифры, символы подчеркивания, начиная со строчных букв

Сопоставьте 126 почтовых ящиков:

 /((^([a-zA-Z]))(\w){5,17})@126.com$/.test("AA3333333333333333@126.com")

Сопоставьте 163 почтовых ящика:

/((^([a-zA-Z]))(\w){5,17}$)|(^(1)(3(\d){9}$)|(4[5-9](\d){8}$)|(5[^4]{9})|(66(\d){8})|(7[0-8](\d){8})|(8(\d){9}$)|(9[8-9](\d){8}$))@163.com$/.test("15132221989@163.com")

Соответствие почтовому ящику qq:

/(^[1-9]){5,10}@qq.com$/.test("115511@qq.com")

Совпадение с почтовым ящиком Сины:

/^[a-z0-9]([a-z0-9_]{3,15})@sina.(com)|(cn)$/.test('223dddddddaddw22@sina.com')

Почтовый ящик поиска по совпадению:

/(^[a-z])(\w){3,15}@sohu.com$/.test("dddddddfw@sohu.com")

(2) китайский

/^[\u4e00-\u9fa5]$/g.test("我")     

(3) Внутренний почтовый индекс

/^[0-9]{6}$/.test(100000)

(4) Имя пользователя: китайский, A-Z a-z 0-9 _

/^[\w\u4e00-\u9fa5]{6,32}$/.test("晴天de_Wo")

(5) Пароль: A-Z a-z 0-9 _

/^\w{6,32}$/.test('2223336')

6. Наконец, порекомендуйте веб-сайт с общими закономерностямиany-rule

В нем есть наши более часто используемые обычные примеры, вы можете просто взять их и использоватьvscodeстудентов могут искать в магазине приложенийany-rule

Вот несколько сценариев, которые вы можете проверить по своему желанию:

  1. URL-адрес, который должен иметь номер порта (илиip)
/^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/
  1. код акций (A股)
/^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$/
  1. китайское имя
/^(?:[\u4e00-\u9fa5·]{2,16})$/
  1. Номерной знак (не новая энергия)
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/

Для более регулярной проверки, пожалуйста, обратитесь по следующему адресу👇

адрес ссылки

. . . . . Продолжение следует

    作者:晴天de雨滴    
    出处:https://juejin.cn/post/6844903614377361422
    版权所有,欢迎保留原文链接进行转载:希望看到我的最新文章的可以添加下关注哦!)