美文网首页让前端飞es6
ES6扫盲:正则表达式-定点标识

ES6扫盲:正则表达式-定点标识

作者: mytac | 来源:发表于2018-09-16 14:53 被阅读17次

前言

最近在读《你不知道的js》下册,发现了一个有意思的东东:正则表达式中新增的标签模式y,英文是stick,书中译作"定点模式"。定点模式主要是指在正则表达式的起点有一个虚拟锚点,只从lastIndex属性制定的位置开始匹配。

匹配规则

const re=/foo/y
const re2=/foo/
const str='##foo##'

re.lastIndex // 0
re.test(str) // false
re2.test(str) // true
re.lastIndex // 0

re.lastIndex=2
re.test(str) // true
re.lastIndex // 5 匹配成功后会更新lastIndex

re.test(str) // false 匹配失败后lastIndex会重置为0
re.lastIndex // 0

从上面的例子中可以看出,正则从lastIndex位置开始匹配,如果不匹配返回false并将lastIndex重置为0;如果匹配成功,lastIndex则会更新至匹配内容之后的字符。

适用场景

结构化的输入字符串

如匹配:"1. aaa 2. bbb 3. ccc"这个字符串,可以明显感知到这个模式是一个数字序号后跟空格+内容+空格,这种模式对应正则表达式为/\d+\.\s(.*?)(?:\s|$)/

const pattern=/\d+\.\s(.*?)(?:\s|$)/y
const str='1. aaa 2. bbb 3. ccc'

str.match(pattern) // "1. aaa ", "aaa"
pattern.lastIndex // 7

str.match(pattern) // "2. bbb ", "bbb"
pattern.lastIndex // 14

str.match(pattern) // "3. ccc", "ccc",
pattern.lastIndex // 20

与g模式的区别

g全局匹配和exec()方法可以模拟这种相对于lastIndex的匹配,如下:

const re=/o+./g
const str='foot book more'

re.exec(str) // ['oot']
re.lastIndex // 4

re.exec(str) // ['ook']
re.lastIndex // 9   

re.exec(str) // ['or']
re.lastIndex // 13

我们可以看到,g模式非定点匹配可以在匹配过程中自由向前移动,之后更新lastIndex值。在第二个匹配中,如果是定点匹配,将会匹配失败

新增属性flags

在es6之前,我们如果需要检查一个正则表达式对象应用了哪些标识,首先要将它转化为字符串,再套用正则。

而在es6中,我们用新的属性flags可以直接获得这些值。

const re=/foo/ig
re.flags // gi

至于这里为什么不是ig,是因为es6规范中规定了表达式的标识按照"gimuy"的顺序列出,无论原始指定的模式是什么。

最后请关注订阅号获得更加及时的推送~

那屋水泡

相关文章

  • ES6扫盲:正则表达式-定点标识

    前言 最近在读《你不知道的js》下册,发现了一个有意思的东东:正则表达式中新增的标签模式y,英文是stick,书中...

  • ES6扫盲

    let、const 和 block 作用域let 允许创建块级作用域,ES6 推荐在函数中使用 let 定义变量,...

  • ECMAScript 6 对正则表达式的一些扩展

    上篇文章对Javascript中的正则表达式进行了简单的介绍,最近楼主在学习es6的一些知识,es6对正则表达式进...

  • Vue项目跨平台迁移会出现的坑

    坑一 .babelrc文件 ES6语法编译配置 错误代码 错误原因 1、ES6 新增了不少标识符,但浏览...

  • 2020-03-16“无接触商业”到来

    【扫盲】线上交易、线下定点配送,用户自提等方式,避免买卖双方直接接触,这种“无接触商业”模式受到消费者青睐。 【原...

  • 小程序短信验证码倒计时

    wxss文件 给发送短信验证码的接口绑定点击事件getSmsCode,绑定禁用标识disabledBtn,文字用变...

  • Es6写react

    1.组件的属性props 1.1设置默认属性 在ES6中为属性:defaultProps(可以标识static定义...

  • 2018-12-4九月

    1.清洗间抹布,定点订标识。餐具清洁抹布,餐具消毒抹布,消毒抹布,台面清洁抹布。位置水槽右上角墙面。 手套挂置。 ...

  • ES6-02 字符串与正则表达式

    ES6学习笔记-字符串与正则表达式 JS字符串编码 在ES6之前,JS的字符串以16位字符编码(UCS-2)为基础...

  • Javascript 权威指南(一)

    html不区分大小写,js区分 正则表达式常量 /javascript/gi 标识符可以以$开始 javascri...

网友评论

    本文标题:ES6扫盲:正则表达式-定点标识

    本文链接:https://www.haomeiwen.com/subject/ejffnftx.html