正则表达式匹配:正则匹配的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
相关文章读者评论发表评论 |