首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非捕获群

非捕获群
EN

Stack Overflow用户
提问于 2019-10-28 23:40:16
回答 1查看 409关注 0票数 0

您希望在哪里使用非捕获组的示例是什么?在此:

代码语言:javascript
复制
(?:7|8|9)

相对于-

代码语言:javascript
复制
(7|8|9)

相对于-

代码语言:javascript
复制
[7-9]

你是否可能会有一个无法用[...]取代的非捕获组呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-28 23:44:39

,你有没有可能会有一个不能用.代替的非捕获组?

当然,当要匹配的子字符串不是单个字符时,例如:

代码语言:javascript
复制
^(?:foo|bar)+$

它将匹配像foobarbar这样的字符串。单独使用字符集进行同样的操作是不可能的。

(?:7+8+9)

相对于-

(7/8/9)

当您需要捕获文本并在以后使用它时,应该使用捕获组。例如,如果要检查匹配并提取匹配组,或者要在模式后面回引用匹配组。

否则,捕获组不起作用,而应该使用非捕获组。

当非捕获组正常工作时,使用捕获组有两个问题:

  • 它在计算上更昂贵,因为正则表达式引擎必须跟踪匹配的组(尽管它不需要)
  • ,这使得模式的意图很难一目了然。当读取正则表达式的人看到一个未捕获的组时,他们可以确定这个组只用于实现特定的逻辑(如重复或交替),但是任何匹配的内容都不必在以后进行跟踪。相反,如果正则表达式的读者看到捕获组,他们可能会期望稍后使用捕获组,并且在读取模式的其余部分时必须记住这一点。如果捕获的组实际上没有在任何地方得到使用,这将是不必要的认知开销。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58599738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档