0

我正在寻找在这种情况下使用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,因为它是不必要的。两者似乎都有效,但我想知道使用其中一个可能存在的差异。

4

1 回答 1

3

RegExp("foo")new RegExp("foo")做同样的事情:

15.10.3 作为函数调用的 RegExp 构造函数

15.10.3.1 正则表达式(模式、标志)

如果 pattern 是 [[Class]] 内部属性为 "RegExp" 且 flags 未定义的对象 R,则返回 R 不变。否则调用标准的内置 RegExp 构造函数 (15.10.4.1),就好像通过表达式 new RegExp(pattern, flags) 并返回由该构造函数构造的对象。

http://es5.github.io/#x15.10.3

In simpler terms, RegExp(/someRegex/) returns that regex, while RegExp("someString") creates a new regexp from the string, just as new RegExp does.

于 2013-09-05T18:11:12.793 回答