为什么以下脚本返回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!
答案 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的更多详情。