Предыдущие слова
Основной синтаксис регулярных выражений в JavaScript был введен ранее. Класс regexp JavaScript представляет регулярные выражения. Как строка, так и regexp определяют методы. Использование регулярных выражений может выполнять мощное сопоставление рисунков, поиск текста и замену. В этой статье будут представлены объекты REGEXP регулярных выражений и регулярные выражения.
Атрибуты и методы
Объект
Регулярные выражения в JavaScript представлены объектами REGEXP, и есть два способа их написать: один из них - буквальный метод; Другой - метод конструктора
Perl Writing Method
Литеральное письмо регулярного выражения, также известное как написание Perl, потому что характеристики регулярного выражения JavaScript заимствованы из Perl
Литералы регулярного выражения определяются как символы, содержащиеся между парой чертов (/) и 3 флагов.
var Express = /pattern /flags;
Соответствующий шаблон регулярных выражений поддерживает следующие 3 флага:
G: означает глобальный паттерн, то есть шаблон будет применен ко всем строкам, а не останавливается немедленно, когда найден первый матч
I: Указывает нечувствительный к случаю режим, то есть случай шаблона и строки игнорируется при определении соответствия.
M: представляет многослойный шаблон, то есть, когда достигнут конец линии текста, он будет продолжать искать, есть ли элемент, соответствующий шаблону в следующей строке.
// Сопоставление всех экземпляров метода «at» из строки var p =/at/g; // test () возвращает логическое значение, чтобы указать, можно ли найти совпадения console.log (p.test ('ata')); // trueconsole.log (p.test ('aba')); // false.Regexp Constructor
Как и обычные встроенные объекты, объекты регулярного выражения REGEXP также поддерживают форму конструктора нового+regexp ().
Конструктор REGEXP получает два параметра: шаблон строки, чтобы соответствовать и дополнительную строку флага (флаги). Три флага струны флага и буквальной имеют одинаковое значение: 'g', 'i', 'm'
Оба параметра конструктора REGEXP являются строками. И любое выражение, определенное с использованием буквальной формы, может использовать конструкторы
// Сопоставление всех экземпляров 'at' string var p1 =/at/g; // такого же, как выше, var p2 = new regexp ('at', 'g');[Примечание] Спецификация Ecmascript3 предусматривает, что регулярное выражение прямого количества будет преобразована в объект Regexp при выполнении в него. Каждая операция регулярного выражения прямого количества, представленной одним и тем же кодом, возвращает один и тот же объект. Спецификация Ecmascript5 составляет противоположные положения, а регулярное выражение, представленное одним и тем же кодом, каждый раз подсчитывается.
Все операции возвращают новые объекты. IE6-8 всегда был реализован в соответствии со спецификацией ECMASCRICT5, поэтому не существует проблемы совместимости
Поскольку литералы регулярных выражений не поддерживают переменные, если переменные появляются в регулярных выражениях, вы можете использовать только конструктор REGEXP, чтобы объединить переменные в параметры конструктора регуляции REGEXP в качестве сплайсинга строки.
【Советы】 Получите элемент через имя класса
функция getByclass (obj, classname) {var elements = obj.getElementsbytagname ('*'); var result = []; var pattern = new Regexp ('(^| // s)' + classname + '(// s | $)'); for (var i = 0; i <elements.length; i ++) {if (pattern.test (elements [i] .classname)) {result.push (elements [i]); }} return result;}Свойства экземпляра
Каждый объект экземпляра Regexp содержит следующие 5 свойств
Global: Boolean Value указывает, указывает ли флаг G Flag Ignorecase: Boolean Value, указывает ли I Flag Flag LastIndex: Integer в позицию символа начала поиска следующего матча. Он считается от 0 Multiline: логическое значение указывает, является ли флаг MSOURCE: String Presention регулярного выражения, которое возвращает в буквальной форме, а не на шаблоне строки, передаваемой в конструкторе
var pattern = new regexp ('// [bc //] at', 'i'); console.log (pattern.global); // falseconsole.log (pattern.ignorecase); // true console.log (pattern.multiline); // falseconsole.log (pattern.lastindex); // 0console.log (pattern.source); // '/[bc/] at'Если вы используете функцию exec () или test () regexp и установите глобальный шаблон 'g', сопоставление регулярного выражения начнется с позиции Lastindex, а LastinDex будет сброшен после успеха каждого матча. Таким образом, вы можете неоднократно итерацию в строке и найти каждый результат соответствия в последовательности. Однако, если вам нужно вызовать один и тот же метод recexp exec () или test () для разных строк, эта переменная также может принести неожиданные результаты сопоставления. Поэтому при замене строки вы должны явно установить LastinDex regexp на 0
// method exec () возвращает совпадение в массиве var p = // w/g; var s = 'ab'; console.log (p.lastindex); // 0console.log (p.exec (s)); // ['a'] console.log (p.lastindex); // 1console.log ( p.exec (s)); // ['b'] console.log (p.lastindex); // 2console.log (p.exec (s)); // nullconsole.log (p.lastindex); // 0
var p = // w/g; var s1 = 'ab'; var s2 = 'ba'; console.log (p.lastindex); // 0console.log (p.exec (s1)); // ['a'] console.log (p.lastindex); // 1console.log (p.exec (s2)); // ['a'] console.log (p.lastindex); // 2
Свойства конструктора
Свойства конструктора REGEXP считаются статическими свойствами, которые варьируются в зависимости от самой последней выполненной операции регулярного выражения.
Есть два способа получить к ним доступ, а именно длинные имена атрибутов и короткие имена атрибутов. Большинство коротких имен атрибутов не являются допустимыми идентификаторами ECMASCRIPT, поэтому к ним необходимо получить доступ через синтаксис квадратных кронштейнов.
Имя длинного атрибута короткое имя атрибута ввод $ _ Последняя строка, соответствующая последней матч $ & the Last Match LastParen $+ Последний матч Последний матч -групп группы LeftContext $ `Входной текст перед последним матчем многослойным $* boolean value, указывающим, используют ли все выражения Multiline Pattern RightContext $
Используя эти свойства, более конкретная информация может быть извлечена из операций, выполняемых методом exec () или метода test ()
// test () используется для проверки того, соответствует ли строка регулярное выражение и возвращает логическое значение var text = 'Это было короткое лето'; var pattern =/(.) hort/g; if (pattern.test (text)) {console.log (regexp.input); // 'Это короткое лето. console.log (regexp.rightcontext); // 'summer' console.log (regexp.lastmatch); // '' short 'console.log (regexp.lastparen); //' s 'console.log (regexp.multil); // false console.log (regexp [' $ _ '] this'/// this 'stirmy Smentle. console.log (regexp ['$ `']); // 'Это было' console.log (regexp ['$'"]); // 's Summer' console.log (regexp ['$ &']); // 'short' console.log (regexp ['$+']; // 's' sonsole.log (regexp ['$+']; }JavaScript имеет 9 свойств конструктора для хранения групп захвата. Эти свойства автоматически заполняются при вызове методов exec () или test ().
[ПРИМЕЧАНИЕ] Теоретически, регулярность.
//Regexp.$1/regexp.$2/regexp.$3… console.log (regexp. $ 2); // t}
Пример метод
Существует 5 методов экземпляра объектов REGEXP, разделенные на две категории. Включая три общих метода объекта: toString (), tolocalstring (), valueof () и регулярные методы сопоставления test () и exe ()
Общий метод объекта
Объект Regexp наследует три метода: toString (), tolocalestring () и значение () объекта объекта.
【ToString ()】
Метод ToString () возвращает буквальную регулярного выражения
【Tolocalestring ()】
Метод ToLocalEString () возвращает буквальный регулярное выражение
【Valueof ()】
Метод значения () возвращает сам объект регулярного выражения
[Примечание] Независимо от того, какое регулярное выражение создается, эти три метода только возвращают свою буквальную форму
var pattern = new regexp ('[bc] at', 'gi'); console.log (pattern.tostring ()); // '/[bc] at/gi'console.log (pattern.tolocalestring ()); // '/[bc] at/gi'console.log (pattern.valueof ()); ///[bc] at/givar pattern =/[bc] at/gi; console.log (pattern.tostring ()); // '/[bc] at/gi'console.log (pattern.tolocalestring ()); // '[bc] at/gi'console.log (pattern.valueof ()); ///[BC] AT/GIРегулярный метод сопоставления
Существует только два метода регулярного сопоставления для объектов REGEXP: exec () и test () соответственно.
【Exec ()】
Метод exec () разработан специально для захвата групп и принимает параметр, а именно строку, к которой должен применяться шаблон. Затем верните массив, содержащий информацию о соответствии, и верните NULL, если нет совпадения.
В массиве матчей первый элемент представляет собой строку, которая соответствует всем шаблону, а другие элементы - это строка, которая соответствует группе захвата в шаблоне. Если в рисунке нет группы захвата, массив содержит только один
Возвращенный массив содержит два дополнительных свойства: индекс и вход. Индекс означает, что совпадение находится в положении строки, вход означает строку, где применяется регулярное выражение
var text = 'мама, папа, ребенок и другие'; var pattern =/mom (и папа (и ребенок)?)?/gi; var matches = pattern.exec (text); console.log (образец, матчи); // pattern.lastindex: 20 // Соотношения [0]: 'Мама и папа и ребенок совпадает [1]:' и папа и ребенок // // matches [2]: Baby '// matches.index: 0 // matches.input: «Мама, папа, ребенок и другие»
Для метода exec (), даже если глобальный флаг (g) установлен в шаблоне, он вернет только один матч за раз. Без настройки глобального флага вызов exec () несколько раз по одной и той же строке всегда будет возвращать информацию первого матча; При настройке глобального флага каждый вызов exec () будет продолжать искать новое совпадение в строке.
var text = 'Cat, Bat, Sat, Fat'; var pattern1 = /.at/;var matches = pattern1.exec (text); console.log (pattern1, matches); // pattern1.lastindex: 0 // matches [0]: 'cat' // matches.index: 0 // matches.input: 'cat, bat, sat'var tex Pattern1.exec (текст); console.log (pattern1, matches); //pattern1.lastIndex:0//matches!
var text = 'cat, bat, sat, fat'; var pattern2 = /.at/g;var matches = pattern2.exec (text); console.log (pattern2, matches); //pattern2.lastIndex:3//matches! :'Кат'//matches.index:0//matches.input:'cat,bat,sat,fat'var text = 'cat, bat, sat, fat'; matches = pattern2.exec (text); консоли.log (pattern2, matches); //pattern2.lastIndex:7//matches!
【Советы】 Используйте метод exec () для поиска всех соответствующих позиций и всех значений
var string = 'j1h342jg24g234j 3g24j1'; var pattern = // d/g; var valuearray = []; // varue var indexarray = []; // position var temp; while (temp = pattern.exec (string))! = null) {valuearRay.push (temp [0]); indexarray.push (temp.index); } // ["1", "3", "4", "2", "2", "4", "2", "3", "4", "3", "2", "4", "1"] [1, 3, 4, 5, 8, 9, 11, 13, 16, 18, 19, 21] [1, 3, 4, 5, 9, 11, 12, 16, 18, 19, 21] [1, 3, 4, 5, 9, 11, 12, 13, 16, 18, 19, 21] [1, 3, 5, 8, 9, 11, 13, 16, 18, 19, 21];【тест()】
Метод test () используется для проверки того, может ли регулярное выражение найти соответствующий текст в строке, получить параметр строки и возвращает true при сопоставлении, в противном случае возвращает False
var text = '000-00-000'; var pattern = // d {3}-/d {2}-/d {4}/; if (pattern.test (text)) {console.log ('шаблон был сопоставлен');}Аналогичным образом, когда метод test () вызывается, свойство LastIndex объекта Regexp будет изменено. Если указан глобальный шаблон, каждый раз, когда выполняется метод Test (), значение смещения LastIndex в строке будет опробовано. Следовательно, разные строки проверяются несколько раз с помощью одинакового регулятора. Значение LastIndex должно быть установлено на 0 после каждого вызова.
var pattern = /^/d <dlogtmiver-/d{2 )-/d_200,/g;console.log(pattern.test('2016-06-23')); ;//trueconsole.log(pattern.test('2016-06-23 /^/d <driew.loging-/d{2 )-/d{2) $/g;console.log(pattern.test('2016-06-23'));//truepattern.lastindex = 0; console.log (pattern.test ('2016-06-23') ;// trueepater 0; console.log (pattern.test ('2016-06-23')); // truepattern.lastindex = 0; console.log (pattern.test ('2016-06-23')); // trueКак упоминалось ранее, JavaScript имеет 9 свойств конструктора для хранения групп захвата. Эти свойства будут автоматически заполнены при вызове метода exec () или test ().
[ПРИМЕЧАНИЕ] Теоретически, регулярность.
if (/^(/d {4})-(/d {2})-(/d {2}) $/. test ('2016-06-23')) {console.log (regexp. $ 1); // '2016' console.log (regexp. $ 2); // '06' Консоль. console.log (regexp. $ 0); // не определено}Выше приведено тип JavaScript System_Regex REGEXP Тип подробного объяснения деталей. Я надеюсь, что все поддерживают wulin.com ~