创建RegExp对象的两种方法与不同之处

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

通过直接量创建RegExp对象

JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多的是通过一种特殊的直接量语法来创建。就像通过引号包裹字符的方式来定义字符串直接量一样,正则表达式直接量定义为包含在一对斜杠(/)之间的字符,例如:

// 通过直接量创建RegExp对象
var demo = /s$/;

运行这段代码创建一个新的RegExp对象,并将它赋值给变量demo。
这个特殊的RegExp对象用来匹配所有以字母"s"结尾的字符串。
我们更多的会使用直接量创建RegExp对象。

通过构造函数RegExp()

用构造函数RegExp()也可以定义个与个之间等价的正则表达式,例如:

// 通过构造函数创建RegExp对象
var demo = new RegExp("s$");

RegExp直接量和对象的创建不同之处

就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的。
程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象。
比如,如果在循环体中写var a =[],则每次遍历都会创建一个新的空数组。

正则表达式直接量则与此不同,ECMAScript3规范规定,一个正则表达式直接量会在执行到它时转换为一个RegExp对象,同一段代码所表示正则表达式直接量的每次运行都会返回同一个对象。ECMAScript5规范则做了相反的规定,同一段代码所表示的正则表达式直接量的每次运行都会返回新对象。IE一直都是按照ECMAScript5规范实现的,多数最新版本的浏览器也开始遵循ECMAScript5。

猜你喜欢

转载自blog.csdn.net/weixin_44198965/article/details/94215695
今日推荐