不出所料,正则表达式也是JavaScript的一种对象。构造正则表达式也有两种,一种是使用JavaScript内置的 new RegExp() 构造函数,另一种是我们推荐的字面声明方式:
// regular expression literal var re = /\\/gm; // constructor var 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); // true reg.foo = "baz"; console.log(re2.foo); // "baz"
如果把var re = /[a-z]/;这里换作new RegExp(),那么console.log(reg === re2);将返回false。
时间: 2024-10-09 23:38:01