JavaScript扩展:正则像函数一样调用

2016-02-20 00:45 6 1 收藏

今天图老师小编给大家展示的是JavaScript扩展:正则像函数一样调用,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - Web开发 】

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

原文地址:《Regular Expressions As Functions》

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]);
};

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

注意上面的两个方法完全忽略 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 方法,却无法跨浏览器执行。

来源:http://www.tulaoshi.com/n/20160220/1632485.html

延伸阅读
标签: 月经
    正常情况下,每次月经量约20毫升~60毫升,当经量少于20毫升(www.tulaoshi.com)时为经量过少,多于80毫升则为经量过多。经量异常通常不能引起足够重视,人们对其的态度可以说是麻痹大意。殊不知,经量就像一面镜子,可以映照出女性体内的多种瑕疵。   主人公:   丽雅上司:持续经量过多。 &nb...
标签: 网络游戏
《兵王》军战分析 像野狼一样战斗 军战的报名时间为周三,周六的00:00-20:00,开战时间为20:30-21:00,由军长到战争狂人西德勒处进行报名,根据五大国家每个军的等级、积分、实力进行配对,若是配对未成功,如报名军团的数量为奇数或者找不到与本军实力平等的军团,则获得平局奖励。 热血已沸腾,披上银色战炮,不再嬉笑,不再回头,回...
节假日孩子积食开胃有方法 中医认为,儿童食积,主要是由于过食油腻厚味的食品,聚积不化,气滞不行所致。因此,用中药调理法以消食化积、理气行滞为主。 积食是中医的一个病证,是指儿童因饮食过量,损伤脾胃,使食物停滞于中焦所形成的胃肠疾患。主要表现为睡不安稳,睡眠中身子不停翻动,有时还会咬牙;平时好好的胃口突然变小了...
女人常吃它皮肤像豆腐一样嫩 春天是一个生机盎然的季节,鸟语花香,十分适合出去游玩。但是女性朋友们的肌肤经受了一个寒冬的侵袭,难免有些肌肤问题,使得爱美女性十分苦恼,那么春季护肤就显得尤为重要了。春天吃什么对皮肤好呢?今天我们就从女性美容的角度出发,来了解一下春季护肤的小妙招都有哪些吧。 女人如何...
澳大利亚流行像猩猩一样跑步健身 如果你觉得传统的跑步方式很无聊,或者没有什么效果,那么你可以试试四肢跑,这种新的健身方式在澳大利亚刮起了一阵旋风。这种运动方式是将匍匐前进与跑步结合起来,你需要让你的四肢着地,尽可能的快速移动。 这种被人们称为大腿的噩梦的运动方式是由澳大利亚运动狂人ShaunMcCarthy。我们不确...

经验教程

833

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部