描述:
JavaScript中定义正则表达式为什么要用new来包装对象?
网上大多数教程里JS中定义正则表达式都会用到:var re=new RegExp(‘ABC’);
但是RegExp(‘ABC’)本身就是一个对象‘object’,为什么不直接用var re=RegExp(‘ABC’);?为什么还要用new来包装对象呢?有什么好处吗?
解决方案1:
new 不是用来“包装对象”,而是通过构造函数来创建对象时的关键字,“包装对象” 在 JavaScript 中有别的含义。var re=RegExp(‘ABC’); 等同于 var re = /ABC/;
解决方案2:RegExp是个构造函数RegExp,搞成构造器可以让你方便的持续操作new出来的对象,而且不会被另一个正则表达式影响。
解决方案3:这就跟new Date() new Array()等方法一个道理,建议题主可以再温习一下JS对象
解决方案4:var fun=function(){
return {};
}
new fun();
fun();
这两个区别
因为js的正则表达式是对象,需要用new操作符来进行构造,就像数组一样啊,RegExp可以理解为一个构造函数,最好的方式是使用/abd/
来创建正则
var re = /hello\d/
var a = 'hello'
var re=new RegExp(a+'\d')
字面量 和 构造函数 的 ‘区别’
解决方案7:/a/i // 字面量形式正则表达式 //
new RegExp('a', 'i') // 构造函数形式正则表达式 //
构造函数创建正则表达式在运行时可以动态的创建字符串构建, 利用这个特点在构建大量重用的复杂表达式十分有效。
var blabla = new RegExp(regStr1 + regStr2 + regStr3, flags)
使用构造函数形式时需要注意字符串中的转义符\
的问题, 即new RegExp('\\w').toString() === /\w/.toString() >= true
。
总结:一般情况下创建正则对象使用正则表达式使用字面量形式, 在需要灵活处理使用构造函数形式。