首页 > 代码库 > JavaScript基础正则表达式的字面声明(012)

JavaScript基础正则表达式的字面声明(012)

不出所料,正则表达式也是JavaScript的一种对象。构造正则表达式也有两种,一种是使用JavaScript内置的 new RegExp() 构造函数,另一种是我们推荐的字面声明方式:

// regular expression literalvar re = /\\/gm;// constructorvar re = new RegExp("\\\\", "gm");

 可以看出字面声明法(Literal)更简洁,由于不必加引号,所以不用象构造函数里的参数那样需要用两个\来表示斜杠。
使用字面声明法来创建正则表达式时,后面的字母代表以下含义:

  • g—全局匹配
  • m—多行
  • i—大小写敏感

匹配和模式(pattern)加上后面的设置字母就组成了正则表达式的字面声明:

许多字符串的处理函数,如String.prototype.replace(),都接受正则表达式的字面声明作为参数:

var no_letters = "abc123XYZ".replace(/[a-z]/gi, "");console.log(no_letters); // 123

 另外一个使用字面声明和构造函数生成正则表达式的区别是,当这个正则表达式对象被函数作为返回值时,字面声明总是保证相同的对象被返回,则构造函数返回的是内容相同的但个体不同的对象。考虑下面的代码:

function getRE() {var re = /[a-z]/;re.foo = "bar";return re;}var reg = getRE(),re2 = getRE();console.log(reg === re2); // truereg.foo = "baz";console.log(re2.foo); // "baz"

 如果把var re = /[a-z]/;这里换作new RegExp(),那么console.log(reg === re2);将返回false。

 

JavaScript基础正则表达式的字面声明(012)