我有以下工作正常,允许表单字段在空白或包含单词“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])$/');
我有以下工作正常,允许表单字段在空白或包含单词“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])$/');
您的代码中有几处错误。
RegExp
需要一个string,而不是像您在第一种情况下传递的正则表达式文字。不过,这似乎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])$');
删除前导和尾随/
字符,您的 reg exp 不会像您期望的那样。将字符加倍,\
以便它们被转义。也[]
意味着匹配任何这些字符。
基本示例
var str = "hello world";
var word = "hello"
var re = new RegExp("^" + word + "\\s?")
console.log( str.match(re) );