/Java(?!Script)([A-Z]\w*)/g 匹配结果请大家讨论

14 篇文章 0 订阅
14 篇文章 0 订阅

这几天翻了一下pdf的犀牛书第六版,一边代码实践加深印象。

当看到正则部分的时候,在260页下部发下如下说明:



当看完这个例子和说明的时候感觉到有些不对劲。

首先说到了  “但Java后面不能跟随“Script””   后面又说 ”它可以匹配 “JavaScript”” ,按这两句话看,是不是前后矛盾呢?  “JavaScript”难道不是“Java”后面跟随“Script”?

好了文字表达上的歧义暂且放下,node上面拼代码看结果:

> "JavaScript".match(/Java(?! Script)([A-Z]\w*)/g)
[ 'JavaScript' ]

什么鬼,竟然匹配出来了!

那么上面说到的 “但Java后面不能跟随“Script”” 这句话不成立?

接着有提到了  “但不能匹配“JavaScripter””,那我们也node一下:

> "JavaScripter".match(/Java(?! Script)([A-Z]\w*)/g)
[ 'JavaScripter' ]

同样也匹配出来了!

那么这个例子有什么用? (?! Script) 这个约束条件怎么用?


再次分析表达式 (/Java(?! Script)([A-Z]\w*)/g ,发现书中?! Script中间带有一个空格,那么我们把空格去掉试一下:

> "JavaScript".match(/Java(?!Script)([A-Z]\w*)/g)
null

这次“JavaScript”没有匹配到,正确。


> "JavaScripter".match(/Java(?!Script)([A-Z]\w*)/g)
null

但是 "JavaScripter"居然也匹配不到了。


由此看来 此处应该是书中的一个bug。(?! Script)具体用法还没领悟。

请大家一起讨论,……




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值