如何在一个捕获组中获取特定模式的字符?

时间:2016-03-09 13:40:08

标签: regex

我有这个字符串:

any123thing

这是我的具体模式:

\d+ // which matches '123' in the string above

现在我希望在一个捕获组中获得anything。有可能吗?

这是我到目前为止所尝试的内容:

(\w+(?:\d+)\w+)

但此^正则表达式中的$1any123thing。我希望得到这个:anything

注意:我不想使用replace功能。

1 个答案:

答案 0 :(得分:1)

你不能

根据regular-expression.info (强调我的)

  

除了将正则表达式的一部分组合在一起外,括号还会创建一个编号的捕获组。它存储与正则表达式 括号中的部分匹配的字符串部分。

考虑你的例子:

(\w+(?:\d+)\w+)

enter image description here

括号内的一切""被捕获,包括非捕获组。

在这种情况下,它实际上等同于仅使用外部捕获组:

(\w+\d+\w+)

您是否拥有其他组内的捕获组,非捕获组或任何组。父组将捕获括号内的所有内容"。

当您不需要使用反向引用时,非捕获组是一种优化工具。但不要让这个名字欺骗你:如果他们在另一个组内,那个组仍然会抓住这个匹配。换句话说,他们不会将自己排除在父母群体之外。

@Tushar建议使用([a-zA-Z]+)\d*([a-zA-Z]+)并同时使用$1$2捕获的群组反向引用。如果您正在使用正则表达式,这是唯一的方法。