创建正则表达式之间的差异

时间:2014-04-23 03:56:57

标签: javascript

以下内容之间有什么区别:

var myConstructedRegExp = new RegExp("the", "g");
var myLiteralRegExp = /the/g;

它们两种方法是否相同,但只有差异是对象和原始引用?

3 个答案:

答案 0 :(得分:1)

两者都是对象。没有正则表达式原语。

一些不同之处在于字符串版本可以更灵活地制作正则表达式,例如:加入其他字符串。请记住,您需要双重转义您计划转义的任何正则表达式元字符。

答案 1 :(得分:0)

有时您会想要以编程方式创建正则表达式。在这种情况下,您需要使用new RegExp

这里有一个例子

var str = "foo";
var re  = new RegExp(str, "g");
//=> /foo/g

在这种情况下,使用RegExp文字不起作用

// does not work!
var str = "foo";
var re = /str/g;
//=> /str/g

我几乎所有事情都使用RegExp文字语法(/foo/),但很高兴知道你可以在需要时回到构造函数(new RegExp("foo"))。

无论哪种方式,两个正则表达式创建方法都会产生具有相同功能的对象。

答案 2 :(得分:0)

虽然在功能上相同,但存在一些细微差别

  1. 由于/ regx / notation是文字,因此无法动态创建。 / abc / +变量+ / def /不起作用。必须使用构造函数表示法。
  2. 正斜杠必须以/ regx / notation转义。不在构造函数中。