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 相关文章推荐
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
jQuery晃动层特效实现方法
Mar 09 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
Mar 20 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
分分钟玩转Vue.js组件
Oct 25 Javascript
JavaScript简单生成 N~M 之间随机数的方法
Jan 13 Javascript
jQuery代码实现实时获取时间
Jan 29 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
Sep 20 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 Javascript
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
php中数组首字符过滤功能代码
2012/07/31 PHP
php实现文件下载更能介绍
2012/11/23 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
高一政治教学反思
2014/01/28 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
委托书的写法
2014/09/16 职场文书
企业财务经理岗位职责
2015/04/08 职场文书