29.正向和负向Lookahead
说明
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
的更实际用途是预查一个字符串中的两个或多个模式。以下是一个简单的密码检查器,预查3到6个字符和至少一个数字:
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相关推荐
- R语言,归一化,,利用专门的归一化函数做正向与负向归一化处理,一行代码就搞定了!
近日看了R语言归一化的博文,觉得他们提出的方法,都是一步一步地硬算,这种方法太笨了.其实R语言有这方面的程序包,用这些包更简单. 首先,安装并载入程序包 install.packages(" ...
- 正负筛选(neo正向+HSV-tk负向)原理
正负筛选的发展(用途) 正负选择系统是基因打靶的常用筛选方法之一.为了更好地筛选发生同源重组的克隆,1988年Mansour等人设计了正负双向选择系统(positive-negative-select ...
- 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
2019独角兽企业重金招聘Python工程师标准>>> 正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positiv ...
- 基于投影学习的负采样改进型上位词关系提取 (翻译学习使用)
原标题:Negative Sampling Improves Hypernymy ExtractionBased on Projection Learning 原作者们(感谢国际友人):Dmitry ...
- java正则表达式课程_通过此免费课程学习正则表达式
java正则表达式课程 by Beau Carnes 通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) & ...
- 回顾 | AAAI 2019最佳论文公布,CMU、斯坦福、MIT上榜
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :AAAI,新智元 [人工智 ...
- c++高级编程学习笔记5
multimap multimap 是一种允许多个元素使用同一个键的 map.和 map 一样,multimap 支持统一初始化.multimap的接口和 map 的接口几乎相同,区别在于multim ...
- FCC JavaScript 算法和数据结构 正则表达式
Free Code Camp 学习笔记 js.正则表达式 Many thx for the FCC platform to open the JS door to me #1 使用测试方法 在编程语言 ...
- mass Framework在后端的核心模块
mass Framework前后通吃,后端是基于node.js组建起来.后端与前端不一样,是依赖于node.js内置模块提供的一些API,因此前端那些依赖于浏览器提供的DOM API的模块无法复用.现 ...
- javascript正则表达式介绍
正则表达式就是一个用来描述字符模式的对象.它被用来在文本中执行模式匹配(pattern-matching)以及"查找-替换"(search-and-replace)的任务.java ...
最新文章
- Warning in install.packages : package ‘RGtk2’ is not available for this version of R
- 入围CVPR最佳论文,这项AI基础研究让我们对虎牙刮目相看
- 操作系统(二十四)多生产者多消费者问题
- iwrite提交不了作业_在云端,我们把花样作业pick起来!
- 重磅下载!业界首本强化学习应用宝典,阿里核心算法团队联袂打造
- java clock计时_Java Clock类| offset()方法与示例
- Vue 3.0暂缓发布,前端同学暂时舒了一口气
- 打车应用上马快递业务靠谱吗?
- cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
- 零中频发射机设计与实现
- 决策树算法的Python实现—基于金融场景实操
- 项目经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三)...
- 杨永智:创业者需具备的六大基因 五大攻略(下)
- 【图像处理基础】RGB的解析
- Android P HAL层添加HIDL实例(详细实现步骤)
- MMD导入Unity利用MMD4Mecanim转化MMD模型
- C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
- 安卓手机来电防火墙_手机号变“广告号”?来电显示暗藏黑色利益链!你可能也被卷入其中...
- python rest api 连接sdn控制器_基于REST-API的SDN控制器故障恢复机制
- sap甲方_这些奇葩的SAP顾问们,你们摆正位置了吗
热门文章
- 科研常用到的计算机编程,科研必备:几款好用的流程图工具,助力你的论文/科研绘图...
- Bootstrap(三)可视化布局系统
- 编写java程序计算梯形面积_学习练习 java面向对象梯形面积
- 罗永浩发声:我的努力很可能失败 但好产品一定要赢
- 微信开启指纹支付显示java,微信找不到指纹支付怎么办?微信指纹支付怎么使用?...
- vscode配置代理
- STM32利用AES加密数据、解密数据
- Cortex-M0芯片GPIO详解
- scrapy15.0,scrapy.contrib.downloadermiddleware.useragent` is deprecated,旧模块被弃用解决办法.
- 成功注册一个谷歌账号