Главная / Action Script 3
ПакетВерхний уровень
Классpublic dynamic class RegExp
НаследованиеRegExp Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

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

Новый объект RegExp можно создать с помощью конструктора new RegExp() или путем присвоения литерала RegExp переменной:

 var pattern1:RegExp = new RegExp("test-\\d", "i");
     var pattern2:RegExp = /test-\d/i;
     

Дополнительную информацию см. в главе "Использование регулярных выражений" документа Программирование на ActionScript 3.0.

Посмотреть примеры

См. также

String.match()
String.replace()
String.search()
Синтаксис регулярных выражений


Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  dotall : Boolean
[только для чтения] Указывает, совпадает ли символ точки (.) в шаблоне регулярного выражения с символами новой строки.
RegExp
  extended : Boolean
[только для чтения] Определяет, должен ли использоваться расширенный режим для регулярного выражения.
RegExp
  global : Boolean
[только для чтения] Определяет, должен ли использоваться глобальный поиск совпадений для регулярного выражения.
RegExp
  ignoreCase : Boolean
[только для чтения] Определяет, игнорируется ли регистр регулярного выражения.
RegExp
  lastIndex : Number
Определяет позицию в индексе для строки, с которой должен начинаться следующий поиск.
RegExp
  multiline : Boolean
[только для чтения] Определяет, установлен ли флаг m (multiline).
RegExp
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
  source : String
[только для чтения] Определяет шаблонную часть регулярного выражения.
RegExp
Общедоступные методы
 МетодОпределено
  
RegExp(re:String, flags:String)
Позволяет создавать регулярное выражение из двух строк.
RegExp
  
Выполняет поиск регулярного выражения в заданной строке str.
RegExp
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
Проверяет совпадение регулярного выражения в заданной строке str.
RegExp
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
dotallсвойство
dotall:Boolean  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Указывает, совпадает ли символ точки (.) в шаблоне регулярного выражения с символами новой строки. Воспользуйтесь флагом s при создании регулярного выражения для выбора dotall = true.



Реализация
    public function get dotall():Boolean

См. также


Пример
В следующем примере показано воздействие флага s (dotall) на регулярное выражение:
var str:String = "<p>Hello\n"
        + "again</p>"
        + "<p>Hello</p>";

var pattern:RegExp = /<p>.*?<\/p>/;
trace(pattern.dotall) // false
trace(pattern.exec(str)); // <p>Hello</p>

pattern = /<p>.*?<\/p>/s;
trace(pattern.dotall) // true
trace(pattern.exec(str)); 
extendedсвойство 
extended:Boolean  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

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

Воспользуйтесь флагом x при создании регулярного выражения, чтобы установить extended = true.



Реализация
    public function get extended():Boolean

См. также


Пример
В следующем примере показаны различные способы создания одного и того же регулярного выражения. В каждом случае регулярное выражение должно соответствовать определенному шаблону телефонного номера (xxx-xxx-xxxx, (xxx) xxx-xxxx или (xxx)xxx-xxxx). Во втором выражении используется флаг x, приводящий к тому, что пробелы в строке игнорируются.
var rePhonePattern1:RegExp = /\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}/; 
var str:String = "The phone number is (415)555-1212.";

trace(rePhonePattern1.extended) // false
trace(rePhonePattern1.exec(str)); // (415)555-1212

var rePhonePattern2:RegExp = / \d{3}-\d{3}-\d{4}  |   \( \d{3} \) \ ? \d{3}-\d{4}  /x; 
trace(rePhonePattern2.extended) // true
trace(rePhonePattern2.exec(str)); // (415)555-1212
globalсвойство 
global:Boolean  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет, должен ли использоваться глобальный поиск совпадений для регулярного выражения. Когда global == true, свойство lastIndex устанавливается после нахождения совпадения. При следующем запросе совпадения механизм регулярных выражений начинает работать с позиции в строке, указанной в свойстве lastIndex. Воспользуйтесь флагом g при создании регулярного выражения, чтобы выбрать для свойства global значение true.



Реализация
    public function get global():Boolean

См. также


Пример
В следующем примере показано влияние установки флага g (global) в методе exec():
var pattern:RegExp = /foo\d/; 
var str:String = "foo1 foo2";
trace(pattern.global); // false
trace(pattern.exec(str)); // foo1
trace(pattern.lastIndex); // 0
trace(pattern.exec(str)); // foo1

pattern = /foo\d/g;
trace(pattern.global); // true
trace(pattern.exec(str)); // foo1
trace(pattern.lastIndex); // 4
trace(pattern.exec(str)); // foo2
ignoreCaseсвойство 
ignoreCase:Boolean  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет, игнорируется ли регистр регулярного выражения. Воспользуйтесь флагом i при создании регулярного выражения, чтобы установить ignoreCase = true.



Реализация
    public function get ignoreCase():Boolean

См. также


Пример
В следующем примере показано влияние установки флага i (ignoreCase):
var pattern:RegExp = /bob/; 
var str:String = "Bob bob";
trace(pattern.ignoreCase); // false
trace(pattern.exec(str)); // bob

pattern = /bob/i;
trace(pattern.ignoreCase); // true
trace(pattern.exec(str)); // Bob
lastIndexсвойство 
lastIndex:Number  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет позицию в индексе для строки, с которой должен начинаться следующий поиск. Это свойство влияет на методы exec() и test() класса RegExp. Однако методы match(), replace() и search() класса String игнорируют свойство lastIndex и всегда начинают поиск с начала строки.

Когда метод exec() или test() находит совпадение, флаг g (global) устанавливается со значением true для регулярного выражения. С помощью этого метода свойство lastIndex автоматически устанавливается в соответствии с позицией в индексе символа, который следует за последним символом в совпадающей подстроке последнего совпадения. Если флаг g (global) принимает значение false, метод не устанавливает свойство lastIndex.

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



Реализация
    public function get lastIndex():Number
    public function set lastIndex(value:Number):void

См. также


Пример
В следующем примере показано воздействие установки свойства lastIndex и то, как оно обновляется после вызова метода exec() для регулярного выражения, в котором установлен флаг g (global):
var pattern:RegExp = /\w\d/g; 
var str:String = "a1 b2 c3 d4";
pattern.lastIndex = 2; 
trace(pattern.exec(str)); // b2
trace(pattern.lastIndex); // 5
trace(pattern.exec(str)); // c3
trace(pattern.lastIndex); // 8
trace(pattern.exec(str)); // d4
trace(pattern.lastIndex); // 11
trace(pattern.exec(str)); // null
multilineсвойство 
multiline:Boolean  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет, установлен ли флаг m (multiline). Если он установлен, совпадает знак·вставки (^) и знак·доллара ($), расположенные в регулярном выражении до и после новой строки. Воспользуйтесь флагом m при создании регулярного выражения, чтобы установить multiline = true.



Реализация
    public function get multiline():Boolean

См. также


Пример
В следующем примере показано влияние установки флага m (multiline):
var pattern:RegExp = /^bob/; 
var str:String = "foo\n"
                + "bob";
trace(pattern.multiline); // false
trace(pattern.exec(str)); // null

pattern = /^bob/m;
trace(pattern.multiline); // true
trace(pattern.exec(str)); // bob
sourceсвойство 
source:String  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет шаблонную часть регулярного выражения.



Реализация
    public function get source():String

См. также


Пример
Следующий код выдает параметр source для двух регулярных выражений:
var re1:RegExp = /aabb/gi;
trace (re1.source); // aabb

var re2:RegExp = new RegExp("x+y*", "i");
trace(re2.source); // x+y*
Сведения о конструкторе
RegExp()Конструктор
public function RegExp(re:String, flags:String)

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Позволяет создавать регулярное выражение из двух строк. Одна строка определяет шаблон регулярного выражения, а другая — флаги, которые в нем используются.

Параметры
re:String — Шаблон регулярного выражения (также называется строкой конструктора). Это основная часть регулярного выражения (ограниченная символами "/").

Примечания.

  • Не включайте в начале и в конце символы "/"; применяйте их только для того, чтобы определить литерал регулярного выражения, не используя конструктор. Например, эквивалентными являются следующие два регулярных выражения:
     var re1:RegExp = new RegExp("bob", "i"); 
            var re2:RegExp = /bob/i;
  • В регулярном выражении, которое определяется методом конструктора RegExp(), чтобы воспользоваться метапоследовательностью, которая начинается с символа обратной косой черты (\) (например, \d, что соответствует любой цифре), дважды введите символ обратной косой черты. Например, эквивалентными являются следующие два регулярных выражения:
     var re1:RegExp = new RegExp("\\d+", ""); 
            var re2:RegExp = /\d/;

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

 
flags:String — Модификаторы регулярного выражения. В их число входят следующие:
  • g — при использовании метода replace(), относящегося к классу String, укажите модификатор для замены всех совпадений, а не только первого из них. Этот модификатор соответствует свойству global экземпляра RegExp.
  • i — при оценке регулярного выражения не учитывается регистр. Этот модификатор соответствует свойству ignoreCase экземпляра RegExp.
  • s — точка (.) соответствует символам новой строки. Примечание. Этот модификатор соответствует свойству dotall экземпляра RegExp.
  • m — символ вставки (^) и символ доллара ($) совпадают до и после символов новой строки. Этот модификатор соответствует свойству multiline экземпляра RegExp.
  • x — символы пробела в строке re игнорируются, чтобы появилась возможность создавать более читабельные конструкторы. Этот модификатор соответствует свойству extended экземпляра RegExp.

Все остальные символы в строке flags игнорируются.

См. также

Сведения о методе
exec()метод
AS3 function exec(str:String):Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Выполняет поиск регулярного выражения в заданной строке str.

Если флаг g (global) не установлен для этого регулярного выражения, то поиск начинается с начала строки (с позиции индекса 0); при поиске игнорируется свойство lastIndex регулярного выражения.

Если флаг g (global) установлен для регулярного выражения, то поиск начинается с позиции индекса, указанной в свойстве lastIndex регулярного выражения. Если в результате поиска найдено совпадение подстроки, значение свойства lastIndex становится равным позиции конца совпадающей подстроки.

Параметры

str:String — Искомая строка.

Возвращает
Object — Если совпадения не найдено, появляется значение null; в противном случае появляется объект, имеющий следующие свойства:
  • Массив, в котором элемент 0 содержит полную совпадающую подстроку, а остальные элементы массива (от 1 до n) содержат подстроки, которые соответствуют группам, заключенным в регулярном выражении в скобки.
  • index — положение совпадающей подстроки в строке
  • input — строка (str)

См. также


Пример
Когда флаг g (global) не установлен в регулярном выражении, то можно воспользоваться exec(), чтобы найти первое совпадение в строке:
         var myPattern:RegExp = /(\w*)sh(\w*)/ig;   
         var str:String = "She sells seashells by the seashore";
         var result:Object = myPattern.exec(str);
         trace(result);
         

Объекту result присваивается следующее значение:

  • result[0] присваивается значение"She" (полное совпадение).
  • result[1] присваивается значение пустой строки (первая совпадающая группа в скобках).
  • result[2] присваивается значение "e" (вторая совпадающая группа в скобках).
  • result.index присваивается значение "0".
  • result.input присваивается значение строки ввода: "She sells seashells by the seashore".

В следующем примере флаг g (global) устанавливается в регулярном выражении, чтобы exec() можно было повторно использовать для поиска нескольких совпадений:

         var myPattern:RegExp = /(\w*)sh(\w*)/ig;  
         var str:String = "She sells seashells by the seashore";
         var result:Object = myPattern.exec(str);
                  while (result != null) {
             trace ( result.index, "\t", result);
             result = myPattern.exec(str);
         }
         

Результатом выполнения этого кода становится следующие выходные данные:


            0      She,,e
            10     seashells,sea,ells
            27     seashore,sea,ore
         
test()метод 
AS3 function test(str:String):Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Проверяет совпадение регулярного выражения в данной строке str.

Если флаг g (global) не установлен для этого регулярного выражения, то поиск начинается с начала строки (с позиции индекса 0); при поиске игнорируется свойство lastIndex регулярного выражения.

Если флаг g (global) установлен для регулярного выражения, то поиск начинается с позиции индекса, указанной в свойстве lastIndex регулярного выражения. Если в результате поиска найдено совпадение подстроки, значение свойства lastIndex становится равным позиции конца совпадающей подстроки.

Параметры

str:String — Тестируемая строка.

Возвращает
Boolean — В случае совпадения выбирается значение true; в противном случае — false.

См. также


Пример

В следующем примере показано применение метода test() по отношению к регулярному выражению, в котором установлен флаг g (global):
var re1:RegExp = /\w/g;
var str:String = "a b c";
trace (re1.lastIndex); // 0
trace (re1.test(str)); // true
trace (re1.lastIndex); // 1
trace (re1.test(str)); // true
trace (re1.lastIndex); // 3
trace (re1.test(str)); // true
trace (re1.lastIndex); // 5
trace (re1.test(str)); // false
Примеры Как пользоваться примерами
RegExpExample.as

В следующем примере показано, как с помощью регулярных выражений можно выполнить синтаксический разбор строк и вернуть новую строку или логическое значение на основе переданной строки. Метод informalizeGreeting() просто заменяет слово Hello выражением Hi независимо от регистра. Кроме того, он удаляет фамилию имени в строке (предполагается, что она соответствует определенному шаблону). В методах validateEmail() и validatePhoneNumber() переданная строка проверяется на предмет соответствия шаблона действительному шаблону адреса электронной почты или конкретного телефонного номера. В зависимости от результатов методы возвращают логические значения.
package {
    import flash.display.Sprite;

    public class RegExpExample extends Sprite {        
        public function RegExpExample() {            
            var formalGreeting:String = "Hello, John Smith.";
            trace(informalizeGreeting(formalGreeting));    // Hi, John.

            var validEmail:String = "name@domain.com";
            trace(validateEmail(validEmail));        // true
            
            var invalidEmail:String = "foo";
            trace(validateEmail(invalidEmail));  // false
            
            var validPhoneNumber:String = "415-555-1212";
            trace(validatePhoneNumber(validPhoneNumber));    // true
            
            var invalidPhoneNumber:String = "312-867-530999";
            trace(validatePhoneNumber(invalidPhoneNumber));  // false
        }
        private function informalizeGreeting(str:String):String {
            var pattern:RegExp = new RegExp("hello, (\\w+) \\w+", "i");
            return str.replace(pattern, "Hi, $1");
        }
        private function validateEmail(str:String):Boolean {
            var pattern:RegExp = /(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/;
            var result:Object = pattern.exec(str);
            if(result == null) {
                return false;
            }
            return true;
        }
        private function validatePhoneNumber(str:String):Boolean {
            var pattern:RegExp = /^\d{3}-\d{3}-\d{4}$/;
            var result:Object = pattern.exec(str);
            if(result == null) {
                return false;
            }
            return true;
        }
    }
}