javascript - insert a variable into regexp
javascript, regex
Solution
There are several things wrong in your code.
`RegExp` expects a string, not a regex literal like you pass in the first case. It seems that `RegExp` is smart enough though and detects that you are passing a regex literal. So your first example works by coincidence and is the same as:
var re = /^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/;
The `/` are not part of the expression, they are the delimiters to denote a regex literal, much like quotation marks (`'`) indicate a string literal. Hence, if you pass the expression as string to `RegExp`, it should not contain `/`.
Since the backslash is the escape character in strings as well, in order to create a literal backslash for the expression you have to escape it: `\\`.
`[hello]` does not test for for the word `hello`, it matches either `h`, `e`, `l` or `o`, thus it is equivalent to `[ehlo]`.
With all that said, your code should be:
var i = "hello";
var re = new RegExp('^$|^'+i+'|^([FG]?\\d{5}|\\d{5}[AB])$');
Problem
I have the following which works fine, allowing a form field to be valid if blank or containing the word "hello" or passing the other validation... ``` var re = new RegExp(/^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/); ``` but I want to make the word "hello" be the value of a variable. I have tried this but it no longer seems to work: ``` var i = "hello"; var re = new RegExp('/^$|^['+i+']|^([FG]?\d{5}|\d{5}[AB])$/'); ```