正则表达式是前端开发中非常常用的一种工具,它可以在字符串中寻找并匹配特定模式的文本,使得开发者能够更加高效地完成字符串操作。在ES9中,正则表达式得到了进一步扩展,让我们一起来看看ES9中新的正则表达式特性吧。
1. RegExp 的 s (dotAll) 标志
在ES9之前,正则表达式中的 .
模式只能匹配除 \r
, \n
之外的任何单个字符。如果想让 .
匹配这两个字符,就需要用到特殊字符 \r
, \n
。这种方式虽然可行,但写起来非常繁琐,并且容易出错。
在ES9中,我们可以通过给正则表达式添加 s
标志来确保 .
包括了所有字符,包括换行符。示例如下:
const str = `hello world`; const regex = /hello.world/s; console.log(regex.test(str)); // true
上述代码中,我们使用 s
标志来确保 .
包含了所有字符,这样正则表达式可以匹配包含换行符的字符串了。
2. 具名捕获组
在ES9中,我们可以给捕获组添加名称,这样捕获组的内容可以被直接引用。示例如下:
const str = '2018-10-01'; const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = str.match(regex); console.log(match.groups.year); // 2018 console.log(match.groups.month); // 10 console.log(match.groups.day); // 01
上述代码中,我们使用 (?<name>pattern)
的语法来为捕获组添加名称,然后通过 match.groups
来获取对应名称的捕获组的值。
3. Unicode 属性转义
在ES9中,我们可以使用 Unicode 属性转义来匹配特定的 Unicode 字符。例如,我们可以使用 \p{Name=Value}
的语法来匹配具有特定属性值的 Unicode 字符。示例如下:
const str = '魚'; const regex = /\p{Script=Han}/u; console.log(regex.test(str)); // true
上述代码中,我们使用 \p{Script=Han}
的语法来匹配中文字符,其中 Script=Han
表示脚本为汉字。
4. 正则表达式 lookbehind
在ES9中,我们可以使用正则表达式的 lookbehind 功能来匹配某些字符之前的内容。具体地,通过使用 (?<=pattern)
的语法,我们可以捕获在 pattern
匹配到的文本之前的内容。示例如下:
const str = 'My email is mymail@example.com'; const regex = /(?<=\bMy email is )[\w\.]+/; const match = str.match(regex); console.log(match[0]); // mymail@example.com
上述代码中,我们使用 (?<=\bMy email is )[\w\.]+
的正则表达式来捕获 @ 之前的字符串。
总结
ES9中新增了一些非常实用的正则表达式特性,这些特性可以帮助我们更加高效地完成字符串操作。在开发中,我们可以根据实际需求运用这些特性来简化代码,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530a3047d4982a6eb2357d3