js下函数般调用正则的方法附代码

2015-01-24信息快讯网

Firefox 包含了一个非标准的 JavaScript 扩展,使正则像函数一样可调用。这为调用正则的 exec 方法提供了便捷。例如,在 Firefox中,regex(”string”) 等同于 regex.exec(”string”)。

曾经 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 面向对象 final类与final方法
一些被忽视的PHP函数(简单整理)
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
PHP GD 图像处理组件的常用函数总结
PHP PDO函数库详解
PHP执行linux系统命令的常用函数使用说明
asp.net Repeater控件的说明及详细介绍及使用方法
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
在IIS7.0下面配置PHP 5.3.2运行环境的方法
php Smarty模板生成html文档的方法
PHP调用Twitter的RSS的实现代码
php ss7.5的数据调用 (笔记)
PHP正则的Unknown Modifier错误解决方法
PHP IPV6正则表达式验证代码
php 文章采集正则代码
PHP simple_html_dom.php+正则 采集文章代码
php 调用远程url的六种方法小结
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
php 正则表达式小结
php fckeditor 调用的函数
php 前一天或后一天的日期
php下汉字转化为拼音的代码第1/2页
php的正则处理函数总结分析
PHP伪静态页面函数附使用方法
php utf-8转unicode的函数第1/2页
PHP学习正则表达式 课件第1/2页
php学习 函数 课件
PHP中MD5函数使用实例代码
详解PHP显示MySQL数据的三种方法
改变Apache端口等配置修改方法
快速配置PHPMyAdmin方法
php中iconv函数使用方法
php不用正则采集速度探究总结
请php正则走开
海河写的 Discuz论坛帖子调用js的php代码
dedecms采集中可以过滤多行代码的正则表达式
php调用mysql存储过程
PHP中通过ADODB库实现调用Access数据库之修正版本 原创
PHP中通过ADO调用Access数据库的方法测试不通过
怎样在PHP中通过ADO调用Asscess数据库和COM程序
©2014-2024 dbsqp.com