javascript正则表达式是从测试时出现错误的变量中获取的;不是一个函数;

javascript正则表达式是从测试时出现错误的变量中获取的;不是一个函数;,javascript,regex,testing,Javascript,Regex,Testing,在纯javascript中:运行以下命令时出现错误: var arg_regex = 'myregex:/^[:a-z0-9\s!\\\/]+$/i'; regex_patt = arg_regex.replace(/^myregex:/,''); if(regex_patt.test(stringtocheck)){ //good } else { //bad } 错误: regex_patt.test is not a function 请帮忙。无法理解它为什么会失败。费利克斯说:

在纯javascript中:运行以下命令时出现错误:

var arg_regex = 'myregex:/^[:a-z0-9\s!\\\/]+$/i';

regex_patt = arg_regex.replace(/^myregex:/,'');

if(regex_patt.test(stringtocheck)){
//good
} else {
//bad
}
错误:

regex_patt.test is not a function
请帮忙。无法理解它为什么会失败。

费利克斯说:

regex_string = arg_regex.split('myregex:/').join('').split('/i').join('');
regex_patt = new RegExp(regex_string);
必须首先从字符串构造RegExp对象

在上面的示例中,您正在替换一个静态字符串,因此您可以使用
string.replace('staticTextToRemove','')
或使用上面显示的
拆分
连接


我听说
split().join()
的性能稍微好一点。。。这是一个巧妙的技巧。

尝试添加这一行,让regex_patt成为一个对象:

    regex_patt = eval(regex_patt);

regex\u patt
仍然是一个字符串,它不是正则表达式。您必须替换更多。。。离开
/…/i
将导致意外行为(即字符按字面意思)。本例中的正则表达式标志会发生什么变化?您是指在开头和结尾看到的
/
?那些都被剥去了。在声明正则表达式文字时,您需要这些,就像您一直在使用的一样。但是当您使用
RegExp
对象时,您会传入一个不被
/
's.thx包围的字符串来解释regex'object'。我在w3c网站上读了很多关于RegExp对象的文章,但我不知道它做了什么,它会把同一个表达式变成什么,然后系统会开始把它看作正则表达式。发送给所有人!