我的正常工作,使表单字段是有效的,如果为空或包含单词“你好”或通过其他验证以下...的JavaScript - 插入变量为正则表达式
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])$/');
我的正常工作,使表单字段是有效的,如果为空或包含单词“你好”或通过其他验证以下...的JavaScript - 插入变量为正则表达式
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
需要一个串,而不是一个正则表达式的文字就像你在第一种情况下通过。看起来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));
与[]的东西好位置。我完全错过了那个错误! – Tom 2012-08-14 14:41:21
请注意,你不检查包含单词一个字符串“hello”而是开始以字母H,E, l或o。 – moopet 2012-08-14 14:34:14
这可能不是你的问题,但是当你将正则表达式写成一个字符串时,例如'\\ d',你也需要避开'\'字符。 – apsillers 2012-08-14 14:35:22
您的正则表达式也匹配“风信子”一词。 – DaoWen 2012-08-14 14:36:11