4

我有以下工作正常,允许表单字段在空白或包含单词“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])$/');
4

2 回答 2

10

您的代码中有几处错误。

  • RegExp需要一个string,而不是像您在第一种情况下传递的正则表达式文字。不过,这似乎RegExp足够聪明,并且检测到您正在传递正则表达式文字。因此,您的第一个示例是巧合,与以下示例相同:

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

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

  • [hello]不测试单词hello,它匹配h,或e,因此它等价于.lo[ehlo]

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

var i = "hello";
var re = new RegExp('^$|^'+i+'|^([FG]?\\d{5}|\\d{5}[AB])$');
于 2012-08-14T14:38:40.383 回答
2

删除前导和尾随/字符,您的 reg exp 不会像您期望的那样。将字符加倍,\以便它们被转义。也[]意味着匹配任何这些字符。

基本示例

var str = "hello world";
var word = "hello"
var re = new RegExp("^" + word + "\\s?")
console.log( str.match(re) );
于 2012-08-14T14:34:16.623 回答