我应该通过regexp删除此函数中的'new'吗?

时间:2013-09-05 17:59:53

标签: javascript regex

我正在查看在此方案中使用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,因为它是不必要的。两者似乎都有效,但我想知道使用其中一种可能存在的差异。

1 个答案:

答案 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一样。