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

внешний интерфейс JavaScript модульный тест регулярное выражение
регулярное выражение js
Часто наше впечатление от регулярных выражений состоит в том, что их трудно выучить и запомнить, мы учимся и забываем, забываем и снова учимся, но всегда чувствуем, что не можем вспомнить.
Что такое регулярное выражение?
Регулярные выражения используют один символ для описания и сопоставления ряда синтаксисов.правилоНить.
Цель использования регулярных выражений --заменятьРабота. Сначала определите правило самостоятельно, а затем перейдите к строке, чтобы сопоставить подстроку, соответствующую правилу.
Чтобы лучше понять регулярные выражения, мы можем использовать визуальные инструменты, онлайн-адрес:

Регулярное выражение:regexper.com
Регулекс:Это отвратительно. IM/Heat solid down/#! Post…
Отладчик:www.debuggex.com/

Сначала изучите синтаксис регулярных выражений:

1. Объект регулярного выражения

js поддерживает регулярные выражения через встроенный объект RegExp.Существует 2 способа создания объектов RegExp: литерал б) конструктор
а. Буквальный
var reg = /\bare\b/g;

这里写图片描述
Написать изображение изображения здесь

Как сделать полнотекстовое сопоставление? ☞“g"

这里写图片描述
напишите сюда описание фото

б. Конструктор
var reg = new RegExp('\\bare\\b','g');
Первый параметр: строка ☞Текст регулярного выражения, "\" в js сам по себе является специальным символом, если вы хотите его использовать, вам нужно экранировать;
Второй параметр: строка ☞ идентификация.

这里写图片描述
напишите сюда описание фото

Полное совпадение текста --> "g":

这里写图片描述
напишите сюда описание фото

модификатор
g: глобальный -- полнотекстовый поиск, не добавлять, искать до первого совпадения;
i: игнорировать регистр — игнорировать регистр, регистр по умолчанию чувствителен к регистру;
m: несколько строк — многострочный поиск.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Найдено: слова с заглавной буквы не заменяются, если вы хотите игнорировать регистр, вы можете сопоставить ☞"i" независимо от регистра.

这里写图片描述
напишите сюда описание фото

2. Мета-персонажи

Регулярные выражения состоят из 2 основных типов символов: 1. Буквенные текстовые символы, 2. Метасимволы.
Метасимволы — это неалфавитные символы, которые имеют особое значение в регулярных выражениях.
* + ? $ ^ . | \ () {} []

这里写图片描述
напишите сюда описание фото

3, классы персонажей

Как правило, один символ регулярного выражения соответствует одному символу строки. Иногда вы хотите сопоставить определенный тип характера (то есть определенного типа символа, который соответствует серии характеристик), как с этим бороться?
☞ Мы можем использовать метасимвол [] для создания простого класса;
☞так называемый класс относится к объектам, отвечающим определенным признакам, что носит общий характер, а не конкретный признак;
☞Выражение [abc] относит символы a, b или c к классу, и выражение может соответствовать таким символам.

这里写图片描述
напишите сюда описание фото

отрицание класса символов
а. Используйте метасимволы^СоздайтеОбратный класс / Отрицательный класс
б. Обратный класс относится к контенту, который не принадлежит к классу
C. Выражение [^abc] представляет содержимое, которое не является символом a, b или c.

这里写图片描述
напишите сюда описание фото

4. Класс области

Используйте класс символов для сопоставления чисел [0123456789]
быть пригодным для использования[a-z]Чтобы соединить 2 персонажа,любой символ от а до я(Это замкнутый интервал, т.е. содержит сами a и z).

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Внутри класса, состоящего из [], можно непрерывно писать [a-zA-Z]

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

В: "-" не является ни специальным символом, ни метасимволом, что мне делать, если я хочу иногда сопоставлять "-" в классе?

这里写图片描述
напишите сюда описание фото

Помните: «-» стоит посередине, т. е. начало, конец синтаксиса, указывающий на диапазон.

这里写图片描述
напишите сюда описание фото

Это будет соответствовать «-».

5, предопределенные классы

这里写图片描述
напишите сюда описание фото

соответствовать одномуab + цифровой + любой символНить

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Регулярные выражения также предоставляют несколько часто используемыхграницасопоставитель

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Открытие: Там, где есть «есть», оно заменено.
Просто хочу заменить слово "есть", слова имеют границы слова.

这里写图片描述
напишите сюда описание фото

Если вы хотите заменить только в «Это», обратите внимание и обнаружите, что передняя часть не является границей, а задняя — границей, поэтому есть
这里写图片描述
напишите сюда описание фото

Уведомление:Значение метасимволов не уникально, оно имеет разное значение в разных сценариях, значение не в [] не меняется на противоположное, а означает «начиная с хх».

这里写图片描述
напишите сюда описание фото

".@"☞"Любой символ+@" для соответствия
"@."☞"@+любой символ" для соответствия
".@$" ☞ "Хочется заканчиваться только @" для соответствия

6. Квантификаторы

Мы хотим сопоставить строку, которая непрерывна N раз, например, "\D\D\D\D\D\D\D\D\D...", чтобы решить такие проблемы, регулярное выражение вводит понятие квантор.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

7. Жадный режим и нежадный режим регулярных выражений

а. Жадный режим

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

这里写图片描述
напишите сюда описание фото

б. Нежадный режим

сделать регулярное выражениесовпадать как можно меньше, то есть, как только совпадение будет успешным, оно не будет продолжаться вниз, это нежадный режим. ☞ВДобавить после квантификатора?Вот и все.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

8. Группировка

Сопоставьте сцену, в которой строка javascript появляется 3 раза подряд, если вы пишете javascript{3} следующим образом:

这里写图片描述
напишите сюда описание фото

Квантификатор может относиться только к следующей за ним букве, а не ко всему слову. использовать( )Функциональная группировка может быть достигнута, так что квантификаторы пакетов.
(Javascript) {3} следующим образом

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

использовать|доступныйилиЭффект:

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

обратная ссылка

2017-11-10 =>11/10/2017

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Замененный контент больше не является постоянным, а переменной. Что я должен сделать в это время? ☞ «$» группируют содержание класса.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Используйте «$1» и т. д. для представления захваченных пакетов, также известных как захват пакетов.
Воспользуйтесь преимуществами группировки, но не хотите ее захватывать, как? ☞ Игнорировать группировку
Если вы не хотите захватывать некоторые группы, вам просто нужно добавить ?: к группе.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

9. Предвидение

Регулярные выражения начинают синтаксический анализ от начала текста к хвосту, направление хвоста текста называется «спереди», а начало текста называется «назад».
Упреждающий просмотр — это когда регулярное выражение соответствует правилу, оно проверяет вперед, выполняется ли утверждение, и направление обратного просмотра/обратного просмотра меняется на противоположное.
js не поддерживает просмотр вперед.
соответствие определенному утверждению называетсяположительный / положительныйсовпадение; несоответствие определенному утверждению называетсяОтрицательный / отрицательныйсоответствовать.

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

10. свойства js-объекта

global: искать ли полный текст, по умолчанию false.
игнорировать регистр: независимо от того, чувствителен он к регистру или нет, значение по умолчанию — false.
multiline: многострочный поиск, по умолчанию false.
lastIndex: следующая позиция последнего символа текущего совпадения выражения.
источник: текстовая строка регулярного выражения.
var reg1 = /\w/;
var reg2 = /\w/gim;

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

RegExp.prototype.test(str)☞ Используется для проверки наличия строки, соответствующей шаблону регулярного выражения в строковом параметре. Возвращает true, если существует, в противном случае возвращает false.
var reg1 = /\w/;
var reg2 = /\w/g;

这里写图片描述
напишите сюда описание фото

Причина: затронут lastIndex.
var reg1 = /\w/;
var reg2 = /\w/g;
while(reg2.test('ab')){
    console.log(reg2.lastIndex);
}

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото

Только первый проход является правильным каждый раз, поэтому каждый раз создается новый экземпляр, но это требует дополнительных затрат памяти. В этом нет необходимости.

这里写图片描述
напишите сюда описание фото

RegExp.prototype.exec(str)☞ Выполняет поиск в строке с использованием шаблона регулярного выражения и обновляет свойства глобального объекта RegExp, чтобы отразить совпадающие результаты.
Возвращает null, если нет подходящего текста, в противном случае возвращает массив результатов:
indexобъявляет позицию первого символа соответствующего текста
inputСохраняет полученную строку string

неглобальный вызов

При вызове exec() неглобального объекта RegExp возвращается массив;
Первый элемент является регулярным выражением, которое соответствует тексту;
Второй элемент — это текст (если есть), соответствующий первому подвыражению RegExpObject;
Третий элемент — это текст (если есть), который соответствует второму подвыражению объекта RegExp и так далее.
String.prototype.search(reg)
☞ Метод search() используется для получения указанной подстроки в строке или для получения подстроки, соответствующей регулярному выражению;
☞Метод возвращает индекс первого подходящего результата и возвращает -1, если он не найден;
☞ Метод search() не выполняет глобального поиска, он игнорирует флаг g и всегда ищет с начала строки.
String.prototype.match(reg)
☞Метод match() извлечет строку, чтобы найти один или несколько текстов, соответствующих регулярному выражению;
☞ Есть ли REGEXP флаг G, оказывает большое влияние на результат.
неглобальный вызов
Если в регулярном выражении нет флага g, метод match() может выполнять сопоставление только со строкой; если соответствующий текст не найден, он вернет null, в противном случае он вернет массив найденных совпадений Информация, связанная с текстом; первый элемент возвращаемого массива хранит совпадающий текст, а остальные элементы хранят текст, совпадающий с подвыражениями регулярного выражения; кроме обычных элементов массива, возвращаемый массив также содержит 2 свойства объекта:indexОбъявить позицию начального символа совпадающего текста в строке;inputзаявлять о правеstringObjectцитаты.
глобальный звонок
If the regexp has flagg, Match () will perform global search, find all match sub-strings in the string, and return null if any matching strings are found; if one or more match strings are found, then one or more matching strings Returns массив.
Элемент массива хранит все совпадающие подстроки в строке, и здесь нет атрибута индекса или входного атрибута.
String.prototype.split(reg)
Обычно используйте split() для разделения строк на массивы символов: 'a,b,c,d'.split(',');//["a","b","c","d"]
В сложных случаях разделения также можно использовать регулярные выражения: 'a1b2c3d'.split(/\d/);//["a","b","c","d"]
String.prototype.replace
String.Prototype.Replace(STR, ReplaceStr)
☞String.prototype.replace(reg,replaceStr)
☞String.prototype.replace(reg, функция)

这里写图片描述
напишите сюда описание фото

значение параметра функции
Функция будет вызываться каждый раз при совпадении замены с 4 параметрами:
1. Сопоставьте строку
2. Содержимое группировки регулярных выражений, если нет группировки, то нет и такого параметра
3. Индекс совпадения в строке
4, исходная строка

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото