如何从字符串创建正则表达式?

时间:2014-11-20 03:55:29

标签: javascript regex

这里有同样的问题: How to pass a regular expression as a function parameter,但我仍然无法让它发挥作用。

这是我用来测试电子邮件的正则表达式的字符串表达式:

var regexp="^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";

如果我把它放到firebug上就像这样执行:

/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"/.test("test@domain.com")

它会给出我想要的东西,但如果把它作为参数传递给函数:

function bool validate(var value, var regexp){
    //escape special characters
    regexp=String(regexp).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
    return new RegExp(regexp,'g').test(value)
}
像这样:

 validate("test@domain.com",regexp);

这会让我失意。请说明我犯了什么错误,谢谢。

更新: 对不起,正如@Bhojendra - C-Link尼泊尔所说,将gwt的jsni代码翻译成这个时输入错误,正确的代码应该是:

 function validate(value, regexp){
   //escape special characters
   var regexp = regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
    return new RegExp(regexp,'g').test(value);
}

但它仍然无法正常工作。

1 个答案:

答案 0 :(得分:2)

替换此行:

function bool validate(var value, var regexp){

有了这个:

function validate(value, regexp){

经过一些修改和拼写错误修复后,这里是代码:

function validate(value, regexp){
    //escape special characters
    var regexp = regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
    return new RegExp(regexp,'g').test(value);
}