说明

Lookahead是一种模式,可以让JavaScript在字符串中预先检查,以便进一步检查模式。当你想在同一个字符串中搜索多个模式时,这可能很有用。

lookaheads有两种:positive lookahead正向预查和negative lookahead负向预查。

positive lookahead将预查确保搜索模式中的元素在那里,但实际上不会匹配它。正向预查是使用(?=...),其中...是不匹配的必需部分。

另一方面,negative lookahead将会预查搜索模式中的元素不存在。负向预查是使用(?!...),其中...是你不想在那里出现的模式。如果不存在负向预查的部分,则返回该模式的其余部分。

Lookahead会让人有点混乱,但一些例子可以帮助你理解。

var quit = "qu";
var noquit = "qt";
var quRegex= /q(?=u)/;
var qRegex = /q(?!u)/;
quit.match(quRegex); // 返回 ["q"]
noquit.match(qRegex); // 返回 ["q"]

lookaheads的更实际用途是预查一个字符串中的两个或多个模式。以下是一个简单的密码检查器,预查36个字符和至少一个数字:

var password = "abc123";
var checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password); // 返回 true

练习

pwRegex中使用lookaheads来匹配长度大于5个字符并具有两个连续数字的密码。

  • 你的正则表达式应该使用两个正向lookaheads.
  • 你的正则表达式应该不匹配"astronaut"
  • 你的正则表达式应该不匹配"airplanes"
  • 你的正则表达式应该匹配"bana12"
  • 你的正则表达式应该匹配"abc123"
  • 你的正则表达式应该不匹配"123"
  • 你的正则表达式应该不匹配"1234"
var pwRegex = /change/; // Change this line

答案

方法 描述
正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
元字符 描述
?

当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

(?=pattern)

正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

{n,}

n 是一个非负整数。至少匹配n 次。

例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
var pwRegex = /(?=\w{5,})(?=\D*\d)/; // Change this line

29.正向和负向Lookahead相关推荐

  1. R语言,归一化,,利用专门的归一化函数做正向与负向归一化处理,一行代码就搞定了!

    近日看了R语言归一化的博文,觉得他们提出的方法,都是一步一步地硬算,这种方法太笨了.其实R语言有这方面的程序包,用这些包更简单. 首先,安装并载入程序包 install.packages(" ...

  2. 正负筛选(neo正向+HSV-tk负向)原理

    正负筛选的发展(用途) 正负选择系统是基因打靶的常用筛选方法之一.为了更好地筛选发生同源重组的克隆,1988年Mansour等人设计了正负双向选择系统(positive-negative-select ...

  3. 正则表达式的先行断言(lookahead)和后行断言(lookbehind)

    2019独角兽企业重金招聘Python工程师标准>>> 正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positiv ...

  4. 基于投影学习的负采样改进型上位词关系提取 (翻译学习使用)

    原标题:Negative Sampling Improves Hypernymy ExtractionBased on Projection Learning 原作者们(感谢国际友人):Dmitry ...

  5. java正则表达式课程_通过此免费课程学习正则表达式

    java正则表达式课程 by Beau Carnes 通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) & ...

  6. 回顾 | AAAI 2019最佳论文公布,CMU、斯坦福、MIT上榜

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :AAAI,新智元 [人工智 ...

  7. c++高级编程学习笔记5

    multimap multimap 是一种允许多个元素使用同一个键的 map.和 map 一样,multimap 支持统一初始化.multimap的接口和 map 的接口几乎相同,区别在于multim ...

  8. FCC JavaScript 算法和数据结构 正则表达式

    Free Code Camp 学习笔记 js.正则表达式 Many thx for the FCC platform to open the JS door to me #1 使用测试方法 在编程语言 ...

  9. mass Framework在后端的核心模块

    mass Framework前后通吃,后端是基于node.js组建起来.后端与前端不一样,是依赖于node.js内置模块提供的一些API,因此前端那些依赖于浏览器提供的DOM API的模块无法复用.现 ...

  10. javascript正则表达式介绍

    正则表达式就是一个用来描述字符模式的对象.它被用来在文本中执行模式匹配(pattern-matching)以及"查找-替换"(search-and-replace)的任务.java ...

最新文章

  1. Warning in install.packages : package ‘RGtk2’ is not available for this version of R
  2. 入围CVPR最佳论文,这项AI基础研究让我们对虎牙刮目相看
  3. 操作系统(二十四)多生产者多消费者问题
  4. iwrite提交不了作业_在云端,我们把花样作业pick起来!
  5. 重磅下载!业界首本强化学习应用宝典,阿里核心算法团队联袂打造
  6. java clock计时_Java Clock类| offset()方法与示例
  7. Vue 3.0暂缓发布,前端同学暂时舒了一口气
  8. 打车应用上马快递业务靠谱吗?
  9. cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
  10. 零中频发射机设计与实现
  11. 决策树算法的Python实现—基于金融场景实操
  12. 项目经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三)...
  13. 杨永智:创业者需具备的六大基因 五大攻略(下)
  14. 【图像处理基础】RGB的解析
  15. Android P HAL层添加HIDL实例(详细实现步骤)
  16. MMD导入Unity利用MMD4Mecanim转化MMD模型
  17. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
  18. 安卓手机来电防火墙_手机号变“广告号”?来电显示暗藏黑色利益链!你可能也被卷入其中...
  19. python rest api 连接sdn控制器_基于REST-API的SDN控制器故障恢复机制
  20. sap甲方_这些奇葩的SAP顾问们,你们摆正位置了吗

热门文章

  1. 科研常用到的计算机编程,科研必备:几款好用的流程图工具,助力你的论文/科研绘图...
  2. Bootstrap(三)可视化布局系统
  3. 编写java程序计算梯形面积_学习练习 java面向对象梯形面积
  4. 罗永浩发声:我的努力很可能失败 但好产品一定要赢
  5. 微信开启指纹支付显示java,微信找不到指纹支付怎么办?微信指纹支付怎么使用?...
  6. vscode配置代理
  7. STM32利用AES加密数据、解密数据
  8. Cortex-M0芯片GPIO详解
  9. scrapy15.0,scrapy.contrib.downloadermiddleware.useragent` is deprecated,旧模块被弃用解决办法.
  10. 成功注册一个谷歌账号