gpt4 book ai didi

javascript - 正则表达式非捕获组 - 没用?

转载 作者:行者123 更新时间:2023-12-02 06:59:12 26 4
gpt4 key购买 nike

我正在努力理解这个概念,但我真的看不出它有什么用,所以我假设我没有捕获要点。

例如-

此正则表达式 /([0-9]+)(?:st|nd|rd|th)?/ 将匹配带有或不带“st”、“rd”等的数字。后缀。

所以 "1st".match(/([0-9]+)(?:st|nd|rd|th)?/g) 返回 ["1st"]

"1".match(/([0-9]+)(?:st|nd|rd|th)?/g) 返回 ["1"]

但是,这在没有 (?:) par 的情况下仍然完全一样!

"1st".match(/([0-9]+)(st|nd|rd|th)?/g) 返回 ["1st"]

谢谢...

最佳答案

非捕获分组更快,因为正则表达式引擎不必跟踪匹配。为了清楚起见,最好不要捕获不需要捕获的内容。例如:

(foo|bar)((z|q)s?)?

这有点做作,但您可以轻松地将其应用于真正的正则表达式。您可以匹配 foozfoozs。我们对 foobar 部分以及 zq 感兴趣,但我们不关心关于可选的 s。那么zq是哪一部分呢?它是捕获组 2 还是捕获组 3?想象一下,如果我们改用 (?:(z|q)。现在,我们知道只有两个捕获组,所以我们不必进行这种心理跳跃。


有时非捕获是必要的,例如 JavaScript 的 .split .

If separator contains capturing parentheses, matched results are returned in the array.

如果您想对拆分使用分组但不想在数组中包含拆分正则表达式,您必须使用非捕获组。

关于javascript - 正则表达式非捕获组 - 没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com