Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a regular expression as a function parameter

Why this returns false instead of true.

function doit(expression) {

    var regex = new RegExp(expression, 'g');

    alert(regex.test('[email protected]'));
}

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/");
​

http://jsfiddle.net/hAV8Q/

like image 993
Registered User Avatar asked Jun 21 '12 17:06

Registered User


2 Answers

Either format your expression properly:

function doit(expression) {
    var regex = new RegExp(expression, 'g');
    alert(regex.test('[email protected]'));
}

doit("^\\w+([-+.\\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
// no / here, escape \

or pass the expression directly:

function doit(expression) {
    alert(expression.test('[email protected]'));
}

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);


The slashes (/) are not part of the expression, they denote a regex literal. If you use a string containing the expression, you have to omit them and escape every backslash since the backslash is the escape character in strings as well.

like image 162
Felix Kling Avatar answered Oct 14 '22 18:10

Felix Kling


Because when creating a regex with new RegExp(), you don't use the delimiters. Remove the / from before and after the string.

Alternatively, pass the regex itself by removing the quotes before and after, and leave out the new RegExp() call.

like image 20
Niet the Dark Absol Avatar answered Oct 14 '22 17:10

Niet the Dark Absol