javascript - 将一个变量插入regexp

时间:2012-08-14 14:31:10

标签: javascript regex

我有以下工作正常,允许表单字段有效,如果空白或包含单词“hello”或通过其他验证...

var re = new RegExp(/^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/);

但我想让“你好”这个词成为变量的值。

我试过这个但它似乎不再起作用了:

var i = "hello";
var re = new RegExp('/^$|^['+i+']|^([FG]?\d{5}|\d{5}[AB])$/');

2 个答案:

答案 0 :(得分:5)

您的代码中存在一些问题。

  • RegExp需要字符串,而不是像第一种情况一样传递的正则表达式字面值。似乎RegExp足够聪明,并且检测到您正在传递正则表达式文字。所以你的第一个例子巧合,并且与:

    相同
    var re = /^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/;
    
  • / 表达式的一部分,它们是表示正则表达式文字的分隔符,非常类似于引号(')表示字符串文字。因此,如果您将表达式作为字符串传递给RegExp,则不应包含/

  • 由于反斜杠也是字符串中的转义字符,因此为了为表达式创建文字反斜杠,您必须将其转义:\\

  • [hello]不测试单词hello,它匹配helo ,因此它相当于[ehlo]

尽管如此,您的代码应该是:

var i = "hello";
var re = new RegExp('^$|^'+i+'|^([FG]?\\d{5}|\\d{5}[AB])$');

答案 1 :(得分:1)

删除前导和尾随/字符,您的reg exp不符合预期。将\个字符加倍,以便对其进行转义。此外,[]表示匹配任何这些字符。

基本示例

var str = "hello world";
var word = "hello"
var re = new RegExp("^" + word + "\\s?")
console.log( str.match(re) );