В регуляризации JS обычно используются четыре операции: проверка, сегментация, извлечение и замена.

внешний интерфейс JavaScript регулярное выражение CSS
В регуляризации JS обычно используются четыре операции: проверка, сегментация, извлечение и замена.

Предисловие: Друзья, которые могут прочитать это эссе, уверены, что более или менее знакомы с обычными правилами (но сколько они еще помнят, знает только «Бог»), давайте сначала отложим в сторону базовые знания грамматики, начнем с собственно программирования, и верифицировать браузер.Четыре штатные операции регулярности: проверка, сегментация, извлечение, замена

Есть три цели использования регулярного

  1. Проверка формы (найти, есть ли в строке символы, соответствующие обычным правилам) XX, если выполняется, OO, если не выполняется
  2. Извлечь содержимое строки (группировка) - выполнить последующие операции (замену) после извлеченияreplaceявляется последующей операцией извлечения)
  3. Сегментацияsplit

1. Проверка

Проверка: определяет, есть ли в строке символы, соответствующие обычным правилам. Основной вопрос

Demo1 определяет, содержит ли строка «привет» (определяет, содержит ли строка определенную строку)

методы для объектов String

метод первый:indexOf()

let str = "hello world!";
console.log(str.indexOf("hello") != -1); // true
// 不是正则, 但却是解决当前题的一种方案,
// indexOf()方法返回调用String对象中第一次出现的指定值的索引, 如果未找到该值, 则返回-1

Способ второй:includes()

let str = "hello world!";
console.log(str.includes("hello")); // true
// includes() 方法用于判断一个字符串是否包含在另一个字符串中, 根据情况返回true或false

Способ третий:search()

let str = "hello world!";
console.log(str.search(/hello/) != -1);
// 只有一个参数, 并且是一个正则表达式对象, 如果传入一个非正则表达式对象,
// 则会使用 new RegExp(obj)隐式地将其转换为正则表达式对象
// 如果匹配成功, 则返回正则表达式在字符串中首次匹配项的索引, 否则, 返回-1

Способ четвертый:match()

let str = "hello world!";
console.log(!!str.match(/hello/g));
// 如果传入一个非正则表达式对象, 则会隐式地使用new RegExp(obj)将其转换为一个RegExp
// 返回值(数组), 如果匹配到数组第一项是匹配的完整字符串, 之后项是用圆括号捕获的结果, 如果没有匹配到, 返回null
// 如果正则表达式包含g标志, 则该方法返回一个Array, 它包含所有匹配的子字符串而不是匹配对象

Методы объектов RegExp

Способ пятый:test()

let str = "hello world!";
console.log(/hello/.test(str));
// 用来查看正则表达式与指定的字符串是否匹配, 返回true或false
// 想要知道一个模式是否存在于一个字符串中, 可以使用test()或者search

Способ шестой:exec()

let str = "hello world!";
console.log(!!/hello/.exec(str));
// exec() 方法在一个指定字符串中执行一个搜索匹配, 返回一个结果数组或null,
// 如果只是为了判断是否匹配(true或false), 可以使用RegExp.test()方法, 或者String.search()方法

Сводка проверки:

  1. Чтобы узнать, включен ли подтвержденный (точный) символ, используйтеString.indexOf() 和 String.includes()
  2. Чтобы узнать, включен ли обычный символ (нечеткое совпадение), используйтеRegExp.test() 和 String.search()
  3. найти устаревшее, использоватьString.match() 和 RegExp.exec()

Сегментация

Сегментация: так называемая «сегментация» состоит в том, чтобы разрезать целевую строку на части вJSиспользуется вsplit

Целевая строка Demo2: «html, css, javascript», разделенная запятой.

let regex = /,/;
let str = "html,css,javascript";
let str2 = "2018/10/18";
console.log(str.split(regex));
console.log(str2.split(/\//));

split()метод использует указанную строку разделителя для преобразованияStringОбъект разбивается на массив строк, чтобы разделить строку на подстроки, чтобы определить положение каждого разделения.

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

извлекать

Извлечение: часто вам нужно извлечь частично совпадающие данные, обычно вам нужно использовать сгруппированные ссылки (групповой захват).

Извлечение из Demo3 год месяц день

метод первый:match()

let str = "2018-10-18";
let regex = /^(\d{4})\D(\d{2})\D(\d{2})$/;
console.log(str.match(regex));

Способ второй:exec()

let str = "2018-10-18";
let regex = /^(\d{4})\D(\d{2})\D(\d{2})$/;
console.log(regex.exec(str));

Способ третий:test()

let str = "2018-10-18";
let regex = /^(\d{4})\D(\d{2})\D(\d{2})$/;
regex.test(str);
console.log(RegExp.$1, RegExp.$2, RegExp.$3);

Способ четвертый:search()

let str = "2018-10-18";
let regex = /^(\d{4})\D(\d{2})\D(\d{2})$/;
str.search(regex);
console.log(RegExp.$1, RegExp.$2, RegExp.$3);

Способ пятый:replace()

let str = "2018-10-18";
let regex = /^(\d{4})\D(\d{2})\D(\d{2})$/;
let date = [];
str.replace(regex, function(match, year, month, day) {
  date.push(year, month, day);
});
console.log(date);

Экстракт Сводка: По существу, захват группировки рекомендуется использоватьmatchа такжеexecСреди них наиболее часто используютсяmatch

String.prototype.match();Параметры: объект регулярного выражения, если передается объект нерегулярного выражения, он будет использоваться неявноnew RegExp(obj)преобразовать его вRegExp, если вы предоставляете какие-либо параметры, используйте их напрямуюmatch(), то вы получите массив с пустыми строками[""]

Возвращаемое значение: если строка соответствует выражению, будет возвращен массив. Первый элемент массива — это полная строка, которая должна быть сопоставлена, а следующие элементы — это результаты, заключенные в круглые скобки. Если совпадений нет, будет вернулсяnull

Если регулярное выражение не содержитgподпишись, тогдаstr.match()вернется иRegExp.exec()Тот же результат. и вернулсяArrayиметь дополнительныйinputсвойство, которое содержит разбираемую необработанную строку и, кроме того, имеетindexатрибут, который указывает индекс результата сопоставления в исходном символе

Если регулярное выражение содержитgфлаг, метод возвращаетArray, который содержит все совпавшие подстроки вместо объектов совпадения, группа захвата не возвращается (т.е. не возвращаетсяindexсвойства иinputАтрибуты). Если совпадения нет, вернутьсяnull.

RegExp.exec()метод выполняет поиск по указанной строке, возвращая массив результатов илиnull

String.match()а такжеRegExp.exec()главное отличие

  1. другая категория
  2. а такжеgСвязанный
  3. execбудет соответствовать только первой совпадающей строке (что означаетgне влияет на ) и все сгруппированные обратные ссылки, хотяgЭто не эффективно, но его использованиеlastIndexа такжеwhileцикл, может достигатьgцель, это больше, чемmatchмощный
  4. matchСодержимое возвращаемого массива и содержит ли регулярное выражениеgактуально (еслиg, содержит все совпавшие подстроки ), если нетg== по умолчаниюexec

заменять

Цель использования обычных правил часто состоит в том, чтобы сопоставить символы соответствующих правил, а следующим шагом часто является замена ^_^

Самый мощный API в регулярной обработке,фокус, фокус, фокус, потому что его часто используют некоторые самозванцы под видом замены, чтобы заняться какими-то плотскими делами

Demo4 заменил гггг-мм-дд на гггг/мм/дд

replace

let str = "2018-10-18";
let regex = /-/g;
console.log(str.replace(regex, "/"));

String.replace();Есть две формы использования, независимо от того, является ли второй параметр строкой или функцией.

1. Когда это строка, следующие символы имеют особое значение$1,$2 ... $99соответствовать1-99сгруппированный захваченный текст

2. Когда это функция, конкретное значение параметров функции обратного вызоваmatch(соответствие содержания),$1(группа 1),$2(группа 2),index( показатель ),input(исходное содержание персонажа)

Суммировать

  1. Чтобы убедиться, что строка (точное совпадение) содержится, используйтеString.indexOf(),String.includes()
  2. Чтобы убедиться, что строка (нечеткое совпадение) содержится, используйтеString.search(),RegExp.test()
  3. Разделить строку (независимо от подтверждения символов и регулярных символов), используйтеString.split(字符串/正则)
  4. Чтобы извлечь информацию о захвате пакетов, используйтеString.match(),RegExp.exec()Обратите внимание на разницу между ними ->g
  5. заменить, использоватьString.replace(String/RegExp, string/function)Обратите внимание на информацию правила второго параметра

Портал ->Регулярное применение базового метода

Ссылаться на

Мини-книга по регулярным выражениям Javascript