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集成FCK的函数代码
Sep 27 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
php读取csv文件并输出的方法
Mar 14 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
8个必备的PHP功能开发
Oct 02 PHP
PHP二维数组去重算法
Dec 17 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
Php获取金书网的书名的实现代码
2010/06/11 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
浅谈Node 调试工具入门教程
2018/03/20 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
numpy库reshape用法详解
2020/04/19 Python
python实现canny边缘检测
2020/09/14 Python
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
新闻人物通讯稿
2014/10/09 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年检验科工作总结
2014/11/22 职场文书
导游词之南京中山陵
2019/11/27 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python