我正在查看在此方案中使用new RegExp()
vs RegExp()
的后果:
function removeWord(str,rexp){
return str.replace(rexp,"")
}
var example1="I like tasty peanuts!";
var banned_word="peanuts";
var build_rexp_from_var=new RegExp(banned_word,"g");
//method #1 -> removeWord(example1,/peanuts/g)
//method #2 -> removeWord(example1,build_rexp_from_var)
//which should be my method #3?
console.log(removeWord(example1,RegExp(banned_word,"g")));
console.log(removeWord(example1,new RegExp(banned_word,"g")));
我想避免创建var build_rexp_from_var
,因为它是不必要的。两者似乎都有效,但我想知道使用其中一种可能存在的差异。
答案 0 :(得分:3)
RegExp("foo")
和new RegExp("foo")
做同样的事情:
15.10.3 RegExp构造函数被称为函数
15.10.3.1 RegExp(模式,标志)
如果pattern是一个对象R,其[[Class]]内部属性为“RegExp”且flags未定义,则返回R不变。 否则调用标准的内置RegExp构造函数(15.10.4.1),就像使用表达式new RegExp(pattern,flags)一样,并返回由该构造函数构造的对象。
http://es5.github.io/#x15.10.3
简单来说,RegExp(/someRegex/)
会返回该正则表达式,而RegExp("someString")
会从字符串中创建一个新的正则表达式,就像new RegExp
一样。