专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » 正则表达式匹配:正则匹配的test函数 »正文

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

来源: 发布时间:星期一, 2009年9月7日 浏览:54次 评论:0
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 specied . Returns true or false.
串中是否有匹配正则表达式返回true或false
其语法格式:
regexp.test([str])注意这里参数是根本没有提到test参数可以是说法
我试着修改这段奇怪代码得到了些运行结果:
复制代码 代码如下:

/xyz/.test("xyz"); // true
/xyz/.test(function{"xyz";}); // false
/xyz/.test(function{ "xyz";}); // true
/xyz/.test(function{ xyz;}); // true
/xyz/.test(function{ axyz;}); // true
/xyz/.test(function{ "axyz";}); // true
/xyz/.test(function{ "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

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: