挑战:万能的slash! 判断js中“/”是正则、除号、注释?
很久以前在其它地方就探讨和关注过这个问题,但都没有满意的解答。 看了zjfeihu 的帖子: 《前端代码加亮插件(html,jss,css),支持即时加亮,运行代码》,再次提出这个比较经典的难题。 目前,DW,Eclipse,EditPlus都不能完全正确的高亮js正则. 似乎只有JS引擎才明白谁是谁的谁? 我们万能的斜线!符号中的奥特曼! 斜线的含义可能是以下之一: *1 字符串里面的普通字符 "//////////" *2 注释里面的普通内容 ; //........./............. *3 行注释标记的前两个斜线之一 //...... *4 除号 x = 6 / 3; 这里的除号可以换行,换行后很变态 *5 赋值运算符 x /= 2; 这里的除号可以换行,换行后很变态 *6 正则表达式的起始符 rgx = /........./; *7 正则表达式的结束符 rgx = /........./; *8 正则表达式里被反斜杠转义的斜线 rgx = /....\/...../; *9 正则表达式里[]里未被转义的斜线 rgx = /....[//]...../; *10 块注释的起始符 /*.........*/; *11 块注释的结束符 /*.........*/; 真是十项全能啊! 对于给定的一段js代码,怎么判断里面的斜线是哪一种情况呢? 最最难的,是判断: * 是否是正则表达式的起始符 * 是否是正则表达式的结束符 * 是否是换行的除号 因为`$~$%~@^%*#***^(省略若干原因500字) 这是做js代码语法加亮必需过的一道槛! var i =1, typeef =2; var a = typeef / 3 /i; 这里是除号,除号 var b = typeof / 3 /i; 这里是正则 var c = typeof / \/i \//i /*....//...*/ //..... 这里几个正斜线依次是:正则起、字符、字符、正则终、块注释起、字符、字符、块注释终、行注释标记 换行的除号很变态,很难判断 i=1,i=1 /2/i; 这里是除号,i 的结果为0.5 i=1,i=1; /2/i; 这里是正则,i 还是1 转义要考虑 字符串变量要考虑 注释要考虑 []里可转义也可不转义要考虑 换行的除号也很变态 javascript运算符里面,主要有5个是单词形式的: delete、instanceof、new、typeof、void 斜线可能紧接在这几个运算符后面,就像上面的例子 运算符要被当作加号减号一样处理,它与表达式要区别开来 还有一个赋值运算符 /= 是要考虑的 JS引擎解析的时候,是怎么处理这个逻辑的呢? 我都还没有想清楚,欢迎给力! |
挑战:万能的slash! 判断js中“/”是正则、除号、注释?的更多相关文章
- 判断js中的数据类型的几种方法
判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...
- 转:判断js中的数据类型的几种方法
判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...
- 如何判断js中的数据类型?
js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...
- 如何判断js中的数据类型
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- [转]如何判断js中的数据类型
原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...
- 如何判断js中的数据类型(转)
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- 判断js中的数据类型
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- JS中的正则应用
如果还未掌握正则基础知识可先看另一篇:正则笔记-忘记就来看 创建方法: 直接量语法:/pattern/attributes 创建 RegExp 对象的语法:new RegExp(pattern, at ...
- js进阶js中支持正则的四个常用字符串函数(search march replace split)
js进阶js中支持正则的四个常用字符串函数(search march replace split) 一.总结 代码中详细四个函数的用法 search march replace split 二.js进 ...
随机推荐
- <摘录>字节对齐(强制对齐以及自然对齐)
struct {}node; 32为的x86,window下VC下sizeof(node)的值为1,而linux的gcc下值为0: 一.WINDOWS下(VC--其实GCC和其原理基本一样,象这种问题 ...
- 在sublime执行自定义脚本
[背景] 一般项目都会有一个预处理的脚本, 在发布,或者预览效果的时候,往往要先执行脚本. 想法来自editplus 习惯了editplus的同学,都知道,可以配置自定义执行的脚本. 一般我会把它配置 ...
- Queue 队列的用法
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. 以下实例演示了队 ...
- react使用echarts
1.安装echarts: npm install echarts --save 2.制作线性图组件,只引入echart必要的js内容 /** * Created by yongyuehuang on ...
- Hive中日期函数总结
--Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...
- LeakCanary 的使用遇到的弯路
基本上来源是: http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/ 1. demon 中自带的android_v7兼容包有问题的,建议自己使 ...
- [Functional Programming] Draw Items from One JavaScript Array to Another using a Pair ADT
We want to be able to pick nine random cards from an array of twelve cards, but can run into problem ...
- 倍福TwinCAT(贝福Beckhoff)应用教程12.2 TwinCAT控制松下伺服 NC初步
在前面我们已经学会了使用贝福自带的调试软件完成试运行,接下来是使用TWINCAT PLC实现这个功能,右击PLC添加一个PLC项目 在VISUs上右击添加一个HMI人机界面 目前PLC程序和人 ...
- java常用英语单词
abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...
- 用JDOM读取XML文件
用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...