ES2018 新特征之:正则表达式反向(lookbehind)断言

ES2018 新特性

  • 异步迭代器

  • 非转义序列的模板字符串

  • 正则表达式反向(lookbehind)断言(本文)

  • 正则表达式 Unicode 转义

  • 正则表达式 s/dotAll 模式

  • 正则表达式命名捕获组

  • 对象展开运算符

  • Promise.prototype.finally


“正则表达式反向断言” 提案 proposal-regexp-lookbehind 由 Gorkem Yakin, Nozomu Katō, Daniel Ehrenberg 负责,目前已经进入 stage 4,预计会是 ES9(ES2018) 的一部分。

1. 概述

断言(Assertion)是一个对当前匹配位置之前或之后的字符的测试, 它不会实际消耗任何字符,所以断言也被称为“非消耗性匹配”或“非获取匹配”。

正则表达式的断言一共有 4 种形式:

  • (?=pattern) 零宽正向肯定断言(zero-width positive lookahead assertion)

  • (?!pattern) 零宽正向否定断言(zero-width negative lookahead assertion)

  • (?<=pattern) 零宽反向肯定断言(zero-width positive lookbehind assertion)

  • (?<!pattern) 零宽反向否定断言(zero-width negative lookbehind assertion)

这里面的 pattern 是一个正则表达式。

lookahead 和 lookbehind 通过被翻译为:

  • 正向 负向

  • 前向 后向

  • 正向 反向

  • 前瞻 后瞻

  • ……

本文档使用“正向”、“反向”。

2. Lookahead assertions 正向断言

在当前的 JavaScript 正则表达式版本中,只支持正向断言。

正向断言的意思是:当前位置后面的字符串应该满足断言,但是并不捕获,仅此而已。

举个例子:

  
  
  
  1. const regex = /just(?=java)/;

这个正则表达式可以匹配 "justjava",但是正则表达式匹配到的字符串不包含 "java"。(这个正则表达式可以匹配 "justjavac" 中的 "just",注意,匹配的结果是 just,并不是 "justjavac"

  
  
  
  1. const match1 = regex.exec('justjavac');

  2. console.log(match1[0]);   // 结果是 just

但是如果这个字符串没有包含 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值