js函数般调用正则


Posted in Javascript onApril 08, 2008

这为调用正则的 exec 方法提供了便捷。例如,在 Firefox中,regex(”string”) 等同于 regex.exec(”string”)。曾经 ECMAScript 4 建议指出这个功能将会增加到 ES4 规范中,但后来的在 ES4-discuss mailing list 的讨论中,这个建议可能被废除。

然而,你可以通过增加 callapply 方法到 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 方法的执行可以跨浏览器。

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 方法,却无法跨浏览器执行。

Javascript 相关文章推荐
gridpanel动态加载数据的实例代码
Jul 18 Javascript
JS Date函数整理方便使用
Oct 23 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
js实现微博发布小功能
Jan 12 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
javascript动态创建对象的属性详解
Nov 07 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
javascript背投广告代码的完善
Apr 08 #Javascript
大家未必知道的Js技巧收藏
Apr 07 #Javascript
用JavaScript调用WebService的示例
Apr 07 #Javascript
HTML中Select不用Disabled实现ReadOnly的效果
Apr 07 #Javascript
javascript add event remove event
Apr 07 #Javascript
JS动画效果代码3
Apr 03 #Javascript
CSS常用网站布局实例
Apr 03 #Javascript
You might like
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python如何控制进程或者线程的个数
2020/10/16 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
经典C++面试题一
2016/11/06 面试题
应届毕业生求职信
2013/11/30 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
光盘行动倡议书
2014/02/02 职场文书
租房协议书
2014/04/10 职场文书
住宅质量保证书
2014/04/29 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
融资合作协议书范本
2014/10/17 职场文书
优秀团员自我评价
2015/03/10 职场文书