当正则表达式匹配测试的字符串时,Javascript .test要么返回false,要么返回false?

Avi*_*ian 2 javascript regex

我正在使用javascript的内置.test()函数来测试字符串或正则表达式是否匹配.我从RegexLib中获取了正则表达式,所以我知道它与它测试的字符串匹配(在这种情况下joe@aol.com),但它要么返回false,要么根本不返回.

这是我的代码:

var string = "joe@aol.com";
var pattern = [\w-]+@([\w-]+\.)+[\w-]+/i;
var match = pattern.test(string);

document.write(match);
Run Code Online (Sandbox Code Playgroud)

当正则表达式被引号括起来时,测试返回false,当它没有包含在任何内容中时,它什么都不返回.

到目前为止我尝试过的:

  • 只需使用一行,var match = '[\w-]+@([\w-]+\.)+[\w-]+/i'.test("joe@aol.com");.
  • 同时使用'单引号和"两个双引号regexstring.
  • 使用/i和附加正则表达式/g.

老实说,我不知道是什么导致了这个问题,所以任何帮助都会很棒.它可能是一个完整的新手错误,也许是一个被遗忘的语法.

这里有一个jsFiddle的链接,如果你认为你已经知道如何解决这个问题,我可以帮你解决这个问题:http://jsfiddle.net/wFhEJ/1/

pim*_*vdb 6

你错过了正则表达式的开头斜线.正则表达式的表示法是:

/regexp/flags
Run Code Online (Sandbox Code Playgroud)

封闭正则表达式后发生的事情是它变成了一个字符串,并且在jsFiddle String.prototype.test上由MooTools设置.MooTools似乎提供了一个String.prototype.test功能,但它并不相同RegExp.prototype.test.

http://jsfiddle.net/wFhEJ/2/

var string = "joe@aol.com";
var pattern = /[\w-]+@([\w-]+\.)+[\w-]+/i;
var match = pattern.test(string);

document.write(match);
Run Code Online (Sandbox Code Playgroud)

请注意,虽然这document.write是不赞成的.你可能更喜欢document.body.appendChild(document.createTextNode(match))或类似的东西.