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 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
PHP常用的缓存技术汇总
May 05 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
帝国cms目录结构分享
Jul 06 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 PHP
php访问对象中的成员的实例方法
Nov 17 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
Track Image Loading效果代码分析
2007/08/13 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
Python urllib3软件包的使用说明
2020/11/18 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
爱国主义教育演讲稿
2014/08/26 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
行政上诉状范文
2015/05/23 职场文书
2015年度女工工作总结
2015/10/22 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
如何Python使用re模块实现okenizer
2022/04/30 Python