奇怪-正则匹配的test函数
在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
转载于:https://www.cnblogs.com/sanshi/archive/2009/07/09/1519585.html
奇怪-正则匹配的test函数相关推荐
- 函数柯里化的作用一:参数复用(正则匹配案例)
什么是函数柯里化 currying? 做题时看到 currying 这个词还挺有意思的,本意是咖喱,翻译为中文叫柯里化,是因为是以逻辑学家 Haskell Curry 命名的. arity(参数个数) ...
- Hive 正则匹配函数 regexp_extract
Hive 正则匹配函数 regexp_extract 1.regexp_extract 语法: regexp_extract(string subject, string pattern, ...
- 常用JS正则匹配函数
//校验用户名:只能输入1-30个字母 function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) retur ...
- python3中find函数的用法_Python3正则匹配re.split,re.finditer及re.findall函数用法详解...
本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法.分享给大家供大家参考,具体如下: re.split re.finditer re.finda ...
- php正则匹配函数字符串长度,PHP中preg_match函数正则匹配的字符串长度问题
PHP中preg_match函数正则匹配的字符串长度问题 发布于 2015-10-25 10:24:29 | 166 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...
- php正则匹配preg_match,php正则表达式中preg_match函数的详解
我们之前给大家介绍了php正则表达式的使用,入门,以及验证邮箱地址,那么我们今天就想大家介绍php正则表达式中的函数preg_match,preg_match函数在php正则表达式中的规则是怎样的? ...
- java正则匹配英文句号_「正则表达式」王国奇遇记
第一回 初来乍到 NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看 ...
- php正则匹配js中变量_Postgresql 中的 正则表达式 模式匹配
参考链接: PostgreSQL 模式匹配www.yiibai.com 1. like string LIKE pattern [ESCAPE escape-character] string NO ...
- Python中正则匹配使用findall时的注意事项
在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串 "123@qq.comaaa@163.combbb@126.comasdf111@a ...
最新文章
- show-busy-java-threads查找CPU占用高
- 软件测试nextdata程序,Nextdata测试用例及源程序.doc
- Chrome 隐藏 SSL 证书信息 禁止禁用 DRM
- 【LeetCode笔记】剑指 Offer 57- II. 和为 s 的连续正数序列(Java、滑动窗口、二刷)
- 第14章 火柴人的无尽冒险(《C和C++游戏趣味编程》配套教学视频)
- ORACLE查询通用查询被锁对象以及解锁方案
- Flink状态管理和容错机制介绍
- 企业落地Kubernetes的问题与对策
- FlightGear Flight Simulator
- Fences 2.1 - 高效实用的桌面图标栅栏分类管理软件神器 (桌面图标再多也不会乱)
- 信息学奥赛NOIP/CSP-J初赛知识点汇总
- 迅雷beat下载为php,2019苹果迅雷beat版链接下载地址-迅雷ios内测版ios13企业信任版app下载官方最新beta手机版-迅雷ios永久稳定版西西软件下载...
- matlab 删除plot上的图,matlab删除部分图例
- 11 MySQL视图
- python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口...
- 投影仪与电视的C位之争,电视会成为下一个被淘汰的电器吗?
- 103000大写加零吗_103000怎样大写不写零
- ros 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。
- T-SNE可视化高维数据,亮瞎审稿人
- Android App Shortcuts