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 动态随机生成验证码类代码
Apr 09 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Vue.js2.0中的变化小结
2017/10/24 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python单元测试简单示例
2018/07/03 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
通过实例解析Python return运行原理
2020/03/04 Python
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
好习惯伴我成长演讲稿
2014/05/21 职场文书
微电影大赛策划方案
2014/06/05 职场文书
教师听课评语大全
2014/12/31 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
交通安全教育主题班会
2015/08/12 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript
Java存储没有重复元素的数组
2022/04/29 Java/Android
win sever 2022如何占用操作主机角色
2022/06/25 Servers