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

How to create regular expression from string?

本文关键字:创建 正则表达式 字符串      更新时间:2023-09-26

这里也提出了同样的问题:如何将正则表达式作为函数参数传递,但我仍然无法让它工作。

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

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);
}

但它仍然不起作用。

替换此行:

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);
}