ГруппыFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий Группу в регулярном выражении можно определить с помощью круглых скобок следующим образом: /class-(\d*)/ Группа является подразделом образца. Группы можно использовать со следующей целью.
В следующих разделах подробно описывается использование таких групп. Использование групп с квалификаторамиЕсли группа не используется, квантификатор применяется к символу или классу символов, предшествующих ему, как это показано далее: var pattern:RegExp = /ab*/ ; // matches the character a followed by // zero or more occurrences of the character b pattern = /a\d+/; // matches the character a followed by // one or more digits pattern = /a[123]{1,3}/; // matches the character a followed by // one to three occurrences of either 1, 2, or 3 Однако можно использовать группу для применения квантификатора к нескольким символам или классам символов: var pattern:RegExp = /(ab)*/; // matches zero or more occurrences of the character a // followed by the character b, such as ababab pattern = /(a\d)+/; // matches one or more occurrences of the character a followed by // a digit, such as a1a5a8a3 pattern = /(spam ){1,3}/; // matches 1 to 3 occurrences of the word spam followed by a space Дополнительные сведения об этом см. в разделе «Квантификаторы». Использование групп с символом оператора перестановок (|)Группы можно использовать для определения групп символов, к которым требуется применить символ оператора перестановок |), как показано ниже: var pattern:RegExp = /cat|dog/; // matches cat or dog pattern = /ca(t|d)og/; // matches catog or cadog Использование групп для сбора совпадений подстрокПри определении в образце стандартной группы в круглых скобках можно позднее сослаться на нее в регулярном выражении. Такой прием известен под названием обратная ссылка, а такие виды групп известны как группы сбора. Например, в следующем регулярном выражении последовательность \1 соответствует всему, чему соответствует подстрока группы в круглых скобках: var pattern:RegExp = /(\d+)-by-\1/; // matches the following: 48-by-48 В регулярном выражении можно указать до 99 таких обратных ссылок, напечатав \1, \2, ... , \99. Аналогичным образом в методе replace() класса String можно использовать $1$99 для вставки в замещающую цепочку собранных совпадений подстрок группы: var pattern:RegExp = /Hi, (\w+)\./; var str:String = "Hi, Bob."; trace(str.replace(pattern, "$1, hello.")); // output: Bob, hello. Также при использовании групп сбора метод exec() класса RegExp и метод match() класса String возвращают подстроки, соответствующие группам сбора: var pattern:RegExp = /(\w+)@(\w+).(\w+)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example,com Использование групп без сбора и групп просмотра впередГруппой без сбора является группа, используемая только для образования групп, она не «собирает» и не совпадает с пронумерованными обратными ссылками. Используйте (?: и ) для определения групп без сбора, как показано далее: var pattern = /(?:com|org|net); Например, обратите внимание на разницу между использованием (com|org) в группе сбора по сравнению с использованием в группе без сбора (метод exec() дает перечень групп сбора после полного совпадения): var pattern:RegExp = /(\w+)@(\w+).(com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example,com //noncapturing: var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example Особым типом группы без сбора является группа просмотра вперед, которая бывает двух типов: позитивная группа просмотра вперед и негативная группа просмотра вперед. Используйте (?= и ) для определения позитивной группы просмотра вперед, которая задает соответствие подобразца в группе определенному положению. Однако часть строки, соответствующая позитивной группе просмотра вперед, может соответствовать оставшимся образцам в регулярном выражении. Например, поскольку в следующем коде (?=e) является позитивной группой просмотра вперед, символ e, которому она соответствует, может совпадать с последующей частью регулярного выражения, в данном случае группой сбора \w*): var pattern:RegExp = /sh(?=e)(\w*)/i; var str:String = "Shelly sells seashells by the seashore"; trace(pattern.exec(str)); // Shelly,elly Используйте (?! и ) для определения негативной группы просмотра вперед, которая задает отсутствие совпадения подобразца в группе определенному положению. Например: var pattern:RegExp = /sh(?!e)(\w*)/i; var str:String = "She sells seashells by the seashore"; trace(pattern.exec(str)); // shore,ore Использование именованных группИменованная группа является типом группы в регулярном выражении, которой дан именованный идентификатор. Используйте (?P<name> и ) для определения именованной группы. Например, в состав следующего регулярного выражения входит именованная группа с идентификатором под именем digits: var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/; При использовании метода exec() добавляется совпадающая именованная группа в качестве свойства массива result: var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/; var str:String = "a123bcd"; var result:Array = myPattern.exec(str); trace(result.digits); // 123 Вот другой пример, в котором используются две именованных группы с идентификаторами name и dom: var emailPattern:RegExp = /(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/; var address:String = "bob@example.com"; var result:Array = emailPattern.exec(address); trace(result.name); // bob trace(result.dom); // example Примечание. Именованные группы не являются частью спецификации языка ECMAScript. Они представляют собой добавленную в ActionScript 3.0 возможность.
|
|