首页 > JavaScript中定义正则表达式为什么要用new来包装对象?

JavaScript中定义正则表达式为什么要用new来包装对象?

JavaScript中定义正则表达式为什么要用new来包装对象?
网上大多数教程里JS中定义正则表达式都会用到:var re=new RegExp(‘ABC’);
但是RegExp(‘ABC’)本身就是一个对象‘object’,为什么不直接用var re=RegExp(‘ABC’);?为什么还要用new来包装对象呢?有什么好处吗?


var re = /hello\d/
var a = 'hello'
var re=new RegExp(a+'\d')

字面量 和 构造函数 的 ‘区别’


new 不是用来“包装对象”,而是通过构造函数来创建对象时的关键字,“包装对象” 在 JavaScript 中有别的含义。var re=RegExp(‘ABC’); 等同于 var re = /ABC/;


/a/i                     // 字面量形式正则表达式 //
new RegExp('a', 'i')     // 构造函数形式正则表达式 //

构造函数创建正则表达式在运行时可以动态的创建字符串构建, 利用这个特点在构建大量重用的复杂表达式十分有效。 var blabla = new RegExp(regStr1 + regStr2 + regStr3, flags)

使用构造函数形式时需要注意字符串中的转义符\的问题, 即new RegExp('\\w').toString() === /\w/.toString() >= true

总结:一般情况下创建正则对象使用正则表达式使用字面量形式, 在需要灵活处理使用构造函数形式。


这就跟new Date() new Array()等方法一个道理,建议题主可以再温习一下JS对象


var fun=function(){

return {};

}

new fun();
fun();
这两个区别


因为js的正则表达式是对象,需要用new操作符来进行构造,就像数组一样啊,RegExp可以理解为一个构造函数,最好的方式是使用/abd/来创建正则


RegExp是个构造函数RegExp,搞成构造器可以让你方便的持续操作new出来的对象,而且不会被另一个正则表达式影响。

【热门文章】
【热门文章】