Вам нужно будет создать свой RegExp из строки вместо использования литерала регулярного выражения.
Вместо создания своего регулярного выражения, как это:
var st2="[0-9]|[12][0-9]|3[01]";
var pattern:RegExp = /^(st2)$/;
Создайте это так:
var st2:String ="[0-9]|[12][0-9]|3[01]";
var pattern:RegExp = new RegExp("^(" + st2 + ")$");
Просто имейте в виду, что вам нужно быть более осторожным с экранированием (и двойным экранированием) с помощью этого конструктора таких вещей, как обратная косая черта.
Причина в том, что первая нотация является литералом регулярного выражения - вы вводите значение переменной st2
, вы помещаете литерал текст "st2" в регулярное выражение.
Возможно, было бы яснее взглянуть на это так - представьте, что вы сделали это:
var st2:String ="123";
var st3:String = "abc st2";
Понятно, что переменная st3
не должна содержать «abc 123» - потому что вы не ссылаетесь на переменную st2
, вы вместо этого вставляете буквальный текст. Это та же самая причина, по которой он не работал с буквенной нотацией RegExp (то есть с использованием двух косых черт).