在下面的代码中如果我将st2替换为没有引号的regexp模式,它可以正常工作。 现在,因为我从其他文件中获取正则表达式,如st2中所示。我想将其添加到正则表达式模式中。但是在下面的代码中它不起作用。
<fx:Script>
import mx.controls.Alert
public function onClicking(){
Alert.show("User says:" + textinput.text + " is new.");
}
public function checkValue(inputValue:String):void{
var st2="[0-9]|[12][0-9]|3[01]";
var pattern:RegExp = /^(st2)$/;
var str:String = textinput.text;
if(pattern.test(str)){
Alert.show("pass");
}
else{
Alert.show("fail");
}
}
</fx:Script>
答案 0 :(得分:2)
您需要从字符串构造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”放入正则表达式。< / p>
以这种方式看待它可能更清楚 - 假设你已经这样做了:
var st2:String ="123";
var st3:String = "abc st2";
很明显,st3
变量不应包含“abc 123” - 因为您没有引用st2
变量,而是放入文字文本。这与它不使用RegExp文字符号(即使用两个正斜杠)的原因相同。