引入

先行断言 (Lookaheads)是告诉 JavaScript 在字符串中向前查找的匹配模式。 当想要在同一个字符串上搜寻多个匹配模式时,这可能非常有用。

有两种先行断言:正向先行断言(positive lookahead)和负向先行断言(negative lookahead)。

正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。 正向先行断言的用法是 (?=...),其中 ... 就是需要存在但不会被匹配的部分。

另一方面,负向先行断言会查看并确保搜索匹配模式中的元素不存在。 负向先行断言的用法是 (?!...),其中 ... 是希望不存在的匹配模式。 如果负向先行断言部分不存在,将返回匹配模式的其余部分。

尽管先行断言有点儿令人困惑,但是这些示例会有所帮助。

let quit = "qu";
let noquit = "qt";
let quRegex= /q(?=u)/;
let qRegex = /q(?!u)/;
quit.match(quRegex);
noquit.match(qRegex);

这两次 match 调用都将返回 ["q"]

先行断言的更实际用途是检查一个字符串中的两个或更多匹配模式。 这里有一个简单的密码检查器,密码规则是 3 到 6 个字符且至少包含一个数字:

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

练习:

在正则表达式 pwRegex 中使用先行断言以匹配大于 5 个字符且有两个连续数字的密码。

let sampleWord = "astronaut";
let pwRegex = /(?=\w{5,})(?=\D+\d{2})/; // 修改这一行
let result = pwRegex.test(sampleWord);

测试通过:

你的正则表达式应该使用两个正向先行断言( lookaheads

您的正则表达式不应匹配字符串 astronaut

你的正则表达式不应匹配字符串 banan1

你的正则表达式应该匹配字符串 bana12

你的正则表达式应该匹配字符串 abc123

你的正则表达式不应匹配字符串 12345

你的正则表达式应该匹配字符串 8pass99

你的正表达式不应匹配字符串 1a2bcde

你的正则表达式应该匹配字符串 astr1on11aut

freeCodeCamp “正向先行断言和负向先行断言“ 练习相关推荐

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

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

  2. php 零宽断言,正则表达式之零宽断言实例详解

    这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念.分类及php实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了正则表达式之零宽断言.分享给大家供大家参考,具体如下: 前言 ...

  3. php 零宽断言,正则表达式之零宽断言实例详解【基于PHP】

    这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念.分类及php实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了正则表达式之零宽断言.分享给大家供大家参考,具体如下: 前言 ...

  4. php 零宽断言,正则表达式之零宽断言

    介绍: 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< \> 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言), ...

  5. php 正则 零宽断言,正则表达式之零宽断言实例详解_正则表达式

    这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念.分类及php实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了正则表达式之零宽断言.分享给大家供大家参考,具体如下: 前言 ...

  6. 零宽断言 python_正则表达式-零宽断言

    [toc] 一.零宽断言-介绍 零宽断言,它匹配的内容不会提取,其作用是在一个限定位置的字符串向前或向后进行匹配查找. 1.1.应用场景 排除查找,查找不含有某段字符串的行 包含查找,查找含有某段字符 ...

  7. java断言assert初步使用:断言开启、断言使用

    1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说"断言不具有继承性". 断言只适 ...

  8. java 断言 assert 初步使用:断言开启、断言使用

    主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言只适用于复杂的调试过程. 断言一般用于程序执行结果的判断 ...

  9. Assertion断言入门(四)——断言覆盖率

    以APB总线协议的断言检查和断言覆盖率为例,学习断言的基本使用和断言覆盖率覆盖.需要用到关键词cover来收集断言覆盖. APB总线协议时序图如下:(首图为读操作时序和后图为写操作时序) PS:关于A ...

最新文章

  1. 012_Vue计算属性
  2. 3、JMSN~Maven安装
  3. oracle opaque_transform,oracle databse link
  4. Beetlex.Redis之Stream功能详解
  5. 2019-05-22 防范ASP木马;如何防止注入攻击;
  6. PHP快速获取MySQL数据库表结构
  7. Windows Server 2012 NIC Teaming
  8. NHibernate从入门到精通系列(3)——第一个NHibernate应用程序
  9. L1-025 正整数A+B (15 分)—团体程序设计天梯赛
  10. 天天Android: (EditText明文、密文切换)
  11. C#调用matlab,matlab图形Figure嵌入Winform窗体
  12. Java加密方式(AES,DES,RSA,DSA,MD5)
  13. Java疯狂讲义读书笔记第五章
  14. 车辆运动学和动力学模型
  15. 其实,我只是一个工程师
  16. 【中级计量经济学】Lecture 8 虚拟变量回归
  17. 如何通过Python进行图片批量下载?
  18. 高并发实时直播弹幕研发实践
  19. python爬虫接单发源地_python爬虫任务接单渠道
  20. Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

热门文章

  1. xps测试常见问题及解答(二)
  2. Android UI开发详解之ActionBar
  3. 韶关2020年计算机专业录取分,韶关学院2020年艺术类专业录取分数线,韶关学院2020年艺术类专业录取情况...
  4. 计算机网络实验 实验三 VLAN基本配置
  5. 达梦DM8搭建DSC过程以及遇到的问题
  6. 理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义
  7. android opencv 银行卡识别,【opencv小应用】银行卡号识别(一)
  8. 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解
  9. 史上最全的物理学科普(值得收藏)
  10. ijkplayer 学习笔记