随着前端语言的不断发展,JavaScript 也在不断地更新迭代。其中,ES12 推出了一些新的正则表达式属性,让开发者在处理字符串时更加便捷。在本文中,我们将详细了解 ES12 中新增的正则表达式属性,并且结合示例代码进行介绍。
/s 修饰符
在 ES12 中,正则表达式新增了 /s 修饰符。该修饰符表示匹配任意单个字符(包括换行符)。如果不使用 /s 修饰符,由于默认是匹配任意单个字符,因此无法匹配到换行符。
举个例子:
const str = "hello\nworld"; console.log(str.match(/hello.world/)); // null console.log(str.match(/hello.world/s)); // ["hello\nworld"]
在上面的例子中,由于默认情况下无法匹配到换行符,因此第一个 console.log 输出 null,而使用 /s 修饰符时,第二个 console.log 输出 ["hello\nworld"]。
具名捕获分组
在 ES12 中,正则表达式新增了具名捕获分组。在以往的版本中,我们使用 /(pattern)/ 来进行捕获分组。而在 ES12 版本中,我们可以使用 (?<name>pattern) 的形式进行具名捕获分组。
举个例子:
const str = "2022-01-01"; const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = regex.exec(str); console.log(match.groups); // { year: '2022', month: '01', day: '01' }
以上代码中,我们使用了具名捕获分组。其中, (?<year>\d{4}) 表示捕获四个数字作为年份,名字为 year。同理,后面的两个组也进行了一样的操作。match.groups 包含了每个具名捕获分组的结果。
这样的语法糖可以让开发者更加方便地 debug 和全面理解代码逻辑。
前后断言
在 ES12 中,正则表达式新增了前后断言。前后断言能够在匹配某些字符串时,考虑到该字符串前面或者后面的内容,从而进行更加精确的匹配。在前后断言中,我们可以使用 (?<=...) 和 (?<!...) 来表示正向和负向前断言,使用 (?=...) 和 (?!...) 来表示正向和负向后断言。
举个例子:
const str1 = "Hello, JavaScript"; const regex1 = /(?<=Hello, )\b\w+\b/; console.log(str1.match(regex1)); // ["JavaScript"] const str2 = "hello, world!"; const regex2 = /(?<!= )\b\w+\b/g; console.log(str2.match(regex2)); // ["hello", "world"]
在上面的代码中,我们先定义了两个字符串 str1 和 str2,并且定义了两个正则表达式 regex1 和 regex2。在 regex1 中,我们使用了前后断言 ?<=Hello, 和 \b\w+\b。意思是匹配以 Hello, 开头的单词。在匹配结果时,仅匹配 "JavaScript"。
在 regex2 中,我们引入了一个负向前断言 (?<!= ),匹配以非空格为开头的单词。在匹配结果时,我们返回了匹配到的所有单词。
RegExp.escape()
在 ES12 中,正则表达式新增了一个静态方法 RegExp.escape()。该方法能够将字符串转义,使得这个字符串可以直接当做字符串字面量使用。在以前的版本中,我们需要自己编写转义的逻辑,而在 ES12 版本中,我们可以直接使用该方法,极大的方便了开发者。
例如,在以前的版本中,我们需要将 . 替换为 .。而在 ES12 版本中,我们可以直接使用 RegExp.escape('.')。
举个例子:
const str = "javascript.programming"; const regex = new RegExp(RegExp.escape("javascript.programming")); console.log(str.match(regex)); // ["javascript.programming"]
在上面的代码中,我们使用了 RegExp.escape() 将 javascript.programming 转义为 javascript.programming,进而生成了一个对应的正则表达式。在匹配时,可以得到 ["javascript.programming"]。
ES12 正则表达式总结
在 ES12 版本中,正则表达式新增了一些很实用的属性,这些新增加的属性可以方便开发人员更加便捷地处理字符串。在本文中,我们介绍了 /s 修饰符、具名捕获分组、前后断言和 RegExp.escape() 四个属性。这些属性优化了开发体验,进而提升了开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65234d6395b1f8cacdab8ee0