js下函数般调用正则的方法附代码


Posted in PHP onJune 22, 2008

曾经 ECMAScript 4 建议指出这个功能将会增加到 ES4 规范中,但后来的在 ES4-discuss mailing list 的讨论中,这个建议可能被废除。

然而,你可以通过增加 call 和 apply 方法到 RegExp.prototype 中类似的现实这些方法。既有助于功能设计,又可实现对函数和正则表达式均有效的隐藏类型(duck-typed )代码。因此,让我们增加这些方法。

RegExp.prototype.call = function (context, str) {
    return this.exec(str);
};
RegExp.prototype.apply = function (context, args) {
    return this.exec(args[0]);
};注意上面的两个方法完全忽略 context 参数,你可以提交 null 或者 任何其他作为 context 的对象,并且你将会类似的得到正则 exec 方法的返回值。使用上面的方法,无论在什么情况下,使我们正常地使用正则表达式和函数变得容易得多。一些很明显的例子,比如这些在 JavaScript 1.6 的数组迭代中很有用。下面的 filter, every, some, 和 map 方法的执行可以跨浏览器。

if (!Array.prototype.filter) {
    // 返回一个数组,如果提供的过滤函数返回 true,则返回存在的数组中的元素。
    Array.prototype.filter = function (func, context) {
        var results = [];
        for (var i = 0; i < this.length; i++) {
            if (i in this && func.call(context, this[i], i, this))
            results.push(this[i]);
        }
        return results;
    };
}

if (!Array.prototype.every) {
    // 返回 true ,如果数组中的每个元素满足提供的测试函数。
    Array.prototype.every = function (func, context) {
        for (var i = 0; i < this.length; i++) {
            if (i in this && !func.call(context, this[i], i, this))
            return false;
        }
        return true;
    };
}

if (!Array.prototype.some) {
    // 返回 true,如果数组中至少有一个元素满足提供的测试函数。
    Array.prototype.some = function (func, context) {
        for (var i = 0; i < this.length; i++) {
            if (i in this && func.call(context, this[i], i, this))
            return true;
        }
        return false;
    };
}

if (!Array.prototype.map) {
    // 返回一个数组,现有数组中的每个元素调用提供的函数的返回值。
    Array.prototype.map = function (func, context) {
        var results = [];
        for (var i = 0; i < this.length; i++) {
            if (i in this)
            results[i] = func.call(context, this[i], i, this);
        }
        return results;
    };
}因为exec 方法返回数组或 null 值,并会恰当的类型转换为 true 和 false,上面的代码允许我们像这样使用:["a","b","ab","ba"].filter(/^a/),返回所有以“a”开始的值:["a","ab"]。

确实,在 Firefox 中已经实现了 Array.prototype.filter ,由于 exec 的间接调用已经在该浏览器中起作用了。但是如果 filter 没有添加 RegExp.prototype.call 方法,却无法跨浏览器执行。

PHP 相关文章推荐
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
PHP实现文件上传操作和封装
Mar 04 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 PHP
php的正则处理函数总结分析
Jun 20 #PHP
PHP伪静态页面函数附使用方法
Jun 20 #PHP
PHP伪静态写法附代码
Jun 20 #PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 #PHP
php学习 字符串课件
Jun 15 #PHP
php学习 函数 课件
Jun 15 #PHP
PHP学习 运算符与运算符优先级
Jun 15 #PHP
You might like
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
vue中的scope使用详解
2017/10/29 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python求pi的方法
2014/10/08 Python
python 系统调用的实例详解
2017/07/11 Python
Win8下python3.5.1安装教程
2020/07/29 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
银行出纳岗位职责
2013/11/25 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
向女朋友道歉的话
2015/01/20 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
消费者投诉书范文
2015/07/02 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
仓库管理制度范本
2015/08/04 职场文书
公司董事任命书
2015/09/21 职场文书