当前位置: 首页 > 图文教程 > 网络编程 > 正则表达式 > 正则匹配的test函数

正则表达式
RegExp对象的方法和属性
asp正则过滤重复字符串的代码
用Javascript正则实现url链接的解析类
正则表达式匹配 非XXX的行
正则表达式不包含属性
ASP正则函数替换分页后的参数
asp match正则函数使用Matchs实例
java正则表达式彻底研究
比较实用的正则表达式学习笔记
asp只采集网站可见文本的正则
asp.net常用正则表达式
js验证email的正则
java正则表达式验证函数
java 字符串匹配函数
js取得参数代码
Further Study of Rugular Expresions
正则表达式之全部符号对照表
正则文本框只能输入正整数
正则表达式在线测试工具
正则表达式提取网址、标题、图片等一例(.Net Asp Javascript/Js)的实现

正则表达式 中的 正则匹配的test函数


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 50 ::
收藏到网摘: n/a

在John Resig 那篇关于在JavaScript中实现简单继承的文章中,有这样一段代码 var fnTest = /xyz/.test(function(){xyz;}) ? /b_superb/ : /.*/;对于其中正则表达式匹配函数test的用法,我很是迷惑:
/xyz/.test(function(){xyz;})我查阅了Mozilla developer center中关于test函数的描述:
Executes the search for a match between a regular expression and a specified string. Returns true or false.
字符串中是否有匹配正则表达式的子字符串。返回true或false。
其语法格式:
regexp.test([str])注意这里的参数是字符串,根本没有提到test函数的参数可以是函数的说法。
我试着修改这段奇怪的代码,得到了一些运行结果:
复制代码 代码如下:

/xyz/.test("xyz"); // true
/xyz/.test(function(){"xyz";}); // false
/xyz/.test(function(){return "xyz";}); // true
/xyz/.test(function(){return xyz;}); // true
/xyz/.test(function(){return axyz;}); // true
/xyz/.test(function(){return "axyz";}); // true
/xyz/.test(function(){return "xayz";}); // false怎么回事?

华丽的分割线
=======================================
我终于知道了,却原来在test内部进行了类型转换,下面代码:
复制代码 代码如下:

/xyz/.test(function(){xyz;});

等价于:
复制代码 代码如下:

/xyz/.test((function(){xyz;}).toString());

又等价于:
复制代码 代码如下:

/xyz/.test("function(){xyz;}");

那么为什么下面的代码返回false呢?
复制代码 代码如下:

/xyz/.test(function(){"xyz";});

我们执行下这行代码就知道了:
复制代码 代码如下:

// 这行代码的执行结果是:"function(){}"
(function(){"xyz";}).toString();

所以我们可以写出更加诡异的代码来迷惑大家了
复制代码 代码如下:

/function/.test(function(){}); // true
// b 表示文字边界(对英文而言的)
/b_superb/.test(function(){this._super();}); // true