如何将字符串作为正则表达式模式传递?

时间:2014-11-20 09:16:58

标签: javascript regex

这里有同样的问题:How to pass a regular expression as a function parameter,我试过这样的话:

 <!DOCTYPE html>
  <html>
    <head>
     <meta charset="UTF-8">
     <title>Insert title here</title>
        <script type="text/javascript">
             function validate(value, regexp){
                   //escape special characters
                   var regexp = regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
                  return new RegExp(regexp,'g').test(value);
             }
       </script>
   </head>
   <body>
      <script>
           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,}))$";
           alert(validate("alex@domain.com",regexp))
      </script>
  </body>
</html>

但它不起作用,我确信模式的字符串是正确的,我已经在这样的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")

它正确匹配电子邮件。所以请告诉我我犯了哪些错误,谢谢。

1 个答案:

答案 0 :(得分:0)

您需要再次逃离\,同时将其放在分隔符"

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,}))$";

OR

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,}))$/;