亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

ES6掃盲:正則表達式-定點標識

標簽:
Html/CSS

前言

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

匹配规则

const re=/foo/yconst re2=/foo/const str='##foo##'re.lastIndex // 0re.test(str) // falsere2.test(str) // truere.lastIndex // 0re.lastIndex=2re.test(str) // truere.lastIndex // 5 匹配成功后会更新lastIndexre.test(str) // false 匹配失败后lastIndex会重置为0re.lastIndex // 0

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

适用场景

结构化的输入字符串

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

const pattern=/\d+\.\s(.*?)(?:\s|$)/yconst str='1. aaa 2. bbb 3. ccc'str.match(pattern) // "1. aaa ", "aaa"pattern.lastIndex // 7str.match(pattern) // "2. bbb ", "bbb"pattern.lastIndex // 14str.match(pattern) // "3. ccc", "ccc",pattern.lastIndex // 20

与g模式的区别

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

const re=/o+./gconst str='foot book more're.exec(str) // ['oot']re.lastIndex // 4re.exec(str) // ['ook']re.lastIndex // 9   re.exec(str) // ['or']re.lastIndex // 13

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

新增属性flags

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

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

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

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



作者:张君卓mytac
链接:https://www.jianshu.com/p/fc9ee9dc8e0d


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消