ES9 中实现非捕获组的与分组捕获并存方法

在 ES9 中,正则表达式语法有了一些新的变化,其中最重要的是实现了非捕获组的与分组捕获并存方法。这个新特性可以让我们更方便地进行正则表达式匹配,并且可以提高代码的可读性和可维护性。

什么是非捕获组?

在正则表达式中,我们可以使用括号来分组匹配,这个括号就是捕获组。捕获组可以让我们在匹配的时候获取到括号内的内容,并且可以在后续的操作中使用。但是有时候我们并不需要获取这个括号内的内容,这个时候就可以使用非捕获组。

非捕获组的语法是 (?:),其中 ?: 表示这个括号内的内容不会被捕获。这个非捕获组可以用来进行分组匹配,但是不会对匹配结果产生影响。

什么是分组捕获并存?

分组捕获并存是指在匹配结果中同时获取到多个括号内的内容。在 ES9 中,我们可以使用 (?<name>) 的语法来给捕获组命名,然后在匹配结果中获取到这个命名的捕获组。这样可以让我们更方便地对匹配结果进行操作。

如何使用非捕获组的与分组捕获并存方法?

在 ES9 中,我们可以使用非捕获组的语法 (?:) 来进行分组匹配。例如,我们要匹配一个字符串中所有以 httphttps 开头的 URL,但是不需要获取这个 URL 的协议部分。我们可以使用如下的正则表达式:

其中,(?:https?:\/\/) 表示匹配以 httphttps 开头的 URL,但是不会捕获这个部分。(\S+) 表示匹配 URL 的剩余部分,并且将这个部分捕获到第一个捕获组中。

如果我们要同时获取 URL 的协议部分和剩余部分,可以使用分组捕获并存的语法 (?<name>)。例如,我们要将一个字符串中的所有 URL 分别存储到 protocolurl 两个变量中,可以使用如下的正则表达式:

其中,(?<protocol>https?:\/\/) 表示匹配 URL 的协议部分,并且将这个部分捕获到 protocol 这个命名的捕获组中。(?<url>\S+) 表示匹配 URL 的剩余部分,并且将这个部分捕获到 url 这个命名的捕获组中。

总结

ES9 中实现了非捕获组的与分组捕获并存方法,可以让我们更方便地进行正则表达式匹配,并且可以提高代码的可读性和可维护性。在使用非捕获组的语法 (?:) 和分组捕获并存的语法 (?<name>) 的时候,需要注意语法的正确使用和命名的合理性,这样可以让我们更方便地对匹配结果进行操作。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655c62ecd2f5e1655d67d47f


纠错
反馈