为什么我在测试正则表达式时会出错?

时间:2014-08-07 14:18:58

标签: javascript regex

为什么以下脚本返回false?

var a = new RegExp("/^[A-Za-z]+[A-Za-z\s]+$/");
var b = "software engineer";
var c = "software.engineer";

var bool = a.test(b);
document.write(bool);

这就是我对reg exp的理解:字符串可能以字母表开头,可能会出现一次或多次,并以可能出现一次或多次的空格或字母结束。

在这种情况下它应该返回true!

4 个答案:

答案 0 :(得分:2)

您需要使用:

var a = new RegExp("^[A-Za-z]+[A-Za-z\\s]+$");

OR:

var a = /^[A-Za-z]+[A-Za-z\s]+$/;

因此,如果您使用new RegExp并且new RegExp也需要双重转义,则不会使用分隔符。

答案 1 :(得分:1)

您将正则表达式定义为字符串,这意味着/分隔符不是必需的,实际上被视为模式的一部分。

语法是:

var regex = /foo/;
or
var regex = new RegExp("foo");

答案 2 :(得分:1)

您正在将正则表达式编写为字符串,因此JS语法会干扰正则表达式语法。改为使用文字:

var a = /^[A-Za-z]+[A-Za-z\s]+$/;

这相当于:

var a = new RegExp("^[A-Za-z]+[A-Za-z\\s]+$");

除了你不需要逃避反斜杠。

答案 3 :(得分:1)

你混淆了字符串文字和正则表达式文字。使用:

var a = new RegExp("^[A-Za-z]+[A-Za-z\\s]+$");

或者

var a = /^[A-Za-z]+[A-Za-z\s]+$/;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions的更多详情。