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

看了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. 获取XIB子视图的两个方法

    创建了一个XIB文件 CommentCell.xib,并设置好UIImageView的tag为100,昵称UILabel的tag为101,时间的UILabel的tag为102,并制定cell为Comm ...

  2. Intellij IDEA System.out.println输出中文乱码问题

    进行下列设置即可:

  3. [Android Memory] Android 的 StrictMode

    android的2.3 之后引入的StrictMode 对网络的访问做了限制啊. public void onCreate() { if (DEVELOPER_MODE) { StrictMode.s ...

  4. 【MySQL】海量量数据查询优化

    参考资料: mysql处理海量数据时的一些优化查询速度方法:http://www.cnblogs.com/lingiu/p/3414134.html mysql千万级大数据SQL查询优化:http:/ ...

  5. Scala 将BigDecimal转换为Long

    待转换.asInstanceOf[Number].longValue (Double转为Long也适用)

  6. cocos2d-之音乐背景播放

    1.先加入头文件 #include <SimpleAudioEngine.h> using namespace CocosDenshion;//为了方便以下的函数使用,使用命名空间 2.在 ...

  7. ionic在iOS中打包失败

    在ios中打包失败,遇上这样的错误 解决办法,查看index.html的权限是否是只读状态,如果是,改成可读可写,再次打包重试,成功!

  8. 依据错误原理解决Hibernate执行出现No CurrentSessionContext configured!错误

    (1)异常信息例如以下: 严重: Servlet.service() for servlet action threw exception java.lang.RuntimeException: &l ...

  9. 小程序app is not defined

    错误记录: 小程序丨 报错:app is not defined; 解决方案: Js头部添加:var app = getApp();     返回按钮: wx.navigateBack();   转发 ...

  10. 图解avaScript中this指向(超透彻)

    一个图讲清楚JavaScript中this指向: 说明: (1)严格模式下,禁止this关键字指向全局对象会报错. (2)闭包中的this对象具有全局性,因此通常指向window.  (3)优先级:n ...