Предисловие: Друзья, которые могут прочитать это эссе, уверены, что более или менее знакомы с обычными правилами (но сколько они еще помнят, знает только «Бог»), давайте сначала отложим в сторону базовые знания грамматики, начнем с собственно программирования, и верифицировать браузер.Четыре штатные операции регулярности: проверка, сегментация, извлечение, замена
Есть три цели использования регулярного
- Проверка формы (найти, есть ли в строке символы, соответствующие обычным правилам) XX, если выполняется, OO, если не выполняется
- Извлечь содержимое строки (группировка) - выполнить последующие операции (замену) после извлечения
replace
является последующей операцией извлечения)- Сегментация
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()方法
Сводка проверки:
- Чтобы узнать, включен ли подтвержденный (точный) символ, используйте
String.indexOf() 和 String.includes()
- Чтобы узнать, включен ли обычный символ (нечеткое совпадение), используйте
RegExp.test() 和 String.search()
- найти устаревшее, использовать
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()
главное отличие
- другая категория
- а также
g
Связанный -
exec
будет соответствовать только первой совпадающей строке (что означаетg
не влияет на ) и все сгруппированные обратные ссылки, хотяg
Это не эффективно, но его использованиеlastIndex
а такжеwhile
цикл, может достигатьg
цель, это больше, чемmatch
мощный -
match
Содержимое возвращаемого массива и содержит ли регулярное выражениеg
актуально (еслиg
, содержит все совпавшие подстроки ), если нетg
== по умолчаниюexec
заменять
Цель использования обычных правил часто состоит в том, чтобы сопоставить символы соответствующих правил, а следующим шагом часто является замена ^_^
Самый мощный API в регулярной обработке,фокус, фокус, фокус, потому что его часто используют некоторые самозванцы под видом замены, чтобы заняться какими-то плотскими делами
Demo4 заменил гггг-мм-дд на гггг/мм/дд
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
(исходное содержание персонажа)
Суммировать
- Чтобы убедиться, что строка (точное совпадение) содержится, используйте
String.indexOf()
,String.includes()
- Чтобы убедиться, что строка (нечеткое совпадение) содержится, используйте
String.search()
,RegExp.test()
- Разделить строку (независимо от подтверждения символов и регулярных символов), используйте
String.split(字符串/正则)
- Чтобы извлечь информацию о захвате пакетов, используйте
String.match()
,RegExp.exec()
Обратите внимание на разницу между ними ->g
- заменить, использовать
String.replace(String/RegExp, string/function)
Обратите внимание на информацию правила второго параметра
Портал ->Регулярное применение базового метода