很久以前在其它地方就探讨和关注过这个问题,但都没有满意的解答。

看了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中“/”是正则、除号、注释?的更多相关文章

  1. 判断js中的数据类型的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  2. 转:判断js中的数据类型的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  3. 如何判断js中的数据类型?

    js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...

  4. 如何判断js中的数据类型

    如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...

  5. [转]如何判断js中的数据类型

    原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...

  6. 如何判断js中的数据类型(转)

    如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...

  7. 判断js中的数据类型

    如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...

  8. JS中的正则应用

    如果还未掌握正则基础知识可先看另一篇:正则笔记-忘记就来看 创建方法: 直接量语法:/pattern/attributes 创建 RegExp 对象的语法:new RegExp(pattern, at ...

  9. js进阶js中支持正则的四个常用字符串函数(search march replace split)

    js进阶js中支持正则的四个常用字符串函数(search march replace split) 一.总结 代码中详细四个函数的用法 search march replace split 二.js进 ...

随机推荐

  1. iOS数据库操作(使用FMDB)

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  2. Java杂谈6——Java安全模型

    Java语言安全模型是其有别于传统的编程语言的一个很重要的特点,采用一种沙箱模型隔离了Java的运行环境与具体的操作系统,使得Java在网络环境下能够更为安全的运行.理解Java的安全模型,能够帮助我 ...

  3. How to enable Hibernate option in windows 2008 R2 server?

    http://velshare.blogspot.com/2013/02/how-to-enable-hibernate-option-in.html 1) To enable the Hiberna ...

  4. linux之touch命令修改文件的时间戳

    功能:对已经存在文件的时间进行修改,存取时间(access time).修改时间(modification time).对不存在的文件,进行创建新的空白文件. 语法:touch   [选项]  文件 ...

  5. c# 播放mp3

    转载:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html /// <summary> /// 播放MP3文件 /// & ...

  6. sting , CSting的区别

    1.string 是C++中的字符串. 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列. 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象 ...

  7. GSM模块_GPRS数据传输机制和原理

    通信专业术语 BSS--基站子系统,通过无线接口与移动台直接联系,负责在一定区域内和移动台通信.(GSM) BTS--基站收发台,可以看作一复杂的无线调制器,BSS的主要部分,每个分配有若干信道.(G ...

  8. solr6.6 索引 word文档

    本文是solr6.6 导入 pdf/doc/txt/json/csv/xml文件 的继续,上篇在索引文件,唯独07格式的word文档不能正常抽取数据,进过研究测试终于,记录下属过程. 其它步骤基本和s ...

  9. Shortest Path [3]

    -----------应要求删除---------------

  10. linux下confstr与uname函数_获取C库与内核信息

    #include <stdio.h> #include <sys/utsname.h> //uname int main(int argc, char **argv[]) { ...