JavaScript中定义正则表达式为什么要用new来包装对象?
ringa_lee
ringa_lee 2017-04-10 16:16:34
[JavaScript讨论组]

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

ringa_lee
ringa_lee

ringa_lee

全部回复(7)
PHP中文网
/a/i                     // 字面量形式正则表达式 //
new RegExp('a', 'i')     // 构造函数形式正则表达式 //

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

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

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

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

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

PHP中文网

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

天蓬老师

var fun=function(){

return {};

}

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

天蓬老师

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

迷茫

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

伊谢尔伦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号