挑战:万能的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引擎解析的时候,是怎么处理这个逻辑的呢?

我都还没有想清楚,欢迎给力!

转载于:https://www.cnblogs.com/jinhengyu/p/10258099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值