我有以下工作正常,允许表单字段有效,如果空白或包含单词“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])$/');
答案 0 :(得分:5)
您的代码中存在一些问题。
RegExp
需要字符串,而不是像第一种情况一样传递的正则表达式字面值。似乎RegExp
足够聪明,并且检测到您正在传递正则表达式文字。所以你的第一个例子巧合,并且与:
var re = /^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/;
/
不表达式的一部分,它们是表示正则表达式文字的分隔符,非常类似于引号('
)表示字符串文字。因此,如果您将表达式作为字符串传递给RegExp
,则不应包含/
。
由于反斜杠也是字符串中的转义字符,因此为了为表达式创建文字反斜杠,您必须将其转义:\\
。
[hello]
不测试单词hello
,它匹配h
,e
,l
或o
,因此它相当于[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) );