предисловие
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
или\r
split) вместо того, чтобы просто сопоставлять начало и конец всей входной строки. -
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
Вот несколько сценариев, которые вы можете проверить по своему желанию:
- URL-адрес, который должен иметь номер порта (или
ip
)
/^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/
- код акций (
A股
)
/^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$/
- китайское имя
/^(?:[\u4e00-\u9fa5·]{2,16})$/
- Номерной знак (не новая энергия)
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
Для более регулярной проверки, пожалуйста, обратитесь по следующему адресу👇
. . . . . Продолжение следует
作者:晴天de雨滴
出处:https://juejin.cn/post/6844903614377361422
版权所有,欢迎保留原文链接进行转载:希望看到我的最新文章的可以添加下关注哦!)