正则表达式是前端开发中十分重要的一部分,是处理文本的强大工具,能够帮助我们在字符串中定位和匹配特定的模式。在 ECMAScript 2017 中,正则表达式得到了一些重要的更新,这篇文章将会详细介绍这些更新的特性和使用方法。
修饰符 y 和 s
在 ECMAScript 2015 中,正则表达式已经引入了修饰符“u”,支持 Unicode 字符的匹配,这也是一个重要的改进。在 ECMAScript 2017 中,正则表达式又得到了两个新的修饰符:"y" 和 "s"。
修饰符 y "sticky" 表示从上一次匹配的结束位置处继续查找,并且只匹配从该位置开始的字符串。这与修饰符 g "global" 不同,后者匹配整个字符串,而前者只匹配第一个匹配的位置之后的字符串。如果想要多次匹配字符串,可以使用 "y" 修饰符。
示例代码:
-- -------------------- ---- ------- ----- --- - ------ -- - -------- ---- --- --- -------------- -- -- --- - --- ------- ----- ---- - ------ ----- ---- - ------ ---------------------------- -- ------ ------ -- ------ ------ -- - -------- ---- --- --- -------------- ---------------------------- -- ------ ------ -- ------ ------ -- - -------- ---- --- --- -------------- ---------------------------- -- ------ ------ --- ------ ------ -- - -------- ---- --- --- -------------- ---------------------------- -- ------ ------ --- ------ ------ -- - -------- ---- --- --- --------------
修饰符 s "dotAll" 表示正则表达式中的点号 "." 匹配任意字符,包括换行符。这与默认的模式不同,如果要在字符串中匹配包含换行符的多行内容,需要使用 "s" 修饰符。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------------------------------- -- ------------- ----- ---- - ------ ---------------------------- -- ------- ------ -- ------ --------------------------------------- -- -- --- ----------------- ----- ---- - ------- ---------------------------- -- ---------------------------------- ------ -- ------ ---------------------------------------
新的断言语法
在 ECMAScript 2017 中,还引入了新的断言语法 "?<=" 和 "?<!" 用于正则表达式的匹配。这两个断言都属于"先行断言",表示当前位置之前或之后的字符需要满足特定的条件。
"?<=" 表示当前位置之前的字符需要和特定的模式匹配,例如我们可以使用它来匹配前后都是数字的字符串。
示例代码:
const str = "123456abc"; const rgx1 = /\d+(?=[a-z])/; console.log(rgx1.exec(str)); // ["123456", index: 0, input: "123456abc"] const rgx2 = /\d+(?<=[0-9])/; console.log(rgx2.exec(str)); // ["123456", index: 0, input: "123456abc"]
"?<!" 表示当前位置之前的字符需要不匹配特定的模式,例如我们可以使用它来匹配前后都不是数字的字符串。
示例代码:
const str = "abc123456"; const rgx1 = /[a-z]+(?![0-9])/; console.log(rgx1.exec(str)); // ["abc", index: 0, input: "abc123456"] const rgx2 = /(?<![0-9])[a-z]+/; console.log(rgx2.exec(str)); // ["abc", index: 0, input: "abc123456"]
总结
在 ECMAScript 2017 中,正则表达式得到了一些重要的更新,包括修饰符 "y" 和 "s",以及新的断言语法 "?<=" 和 "?<!”。这些特性使得正则表达式在处理字符串方面更加强大可靠,为前端开发提供了更多工具和可能性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fa3a26f6b2d6eab3152b55