我有这个字符串:
any123thing
这是我的具体模式:
\d+ // which matches '123' in the string above
现在我希望在一个捕获组中获得anything
。有可能吗?
这是我到目前为止所尝试的内容:
(\w+(?:\d+)\w+)
但此^正则表达式中的$1
为any123thing
。我希望得到这个:anything
。
注意:我不想使用replace
功能。
答案 0 :(得分:1)
根据regular-expression.info (强调我的):
除了将正则表达式的一部分组合在一起外,括号还会创建一个编号的捕获组。它存储与正则表达式 括号中的部分匹配的字符串部分。
考虑你的例子:
括号内的一切""被捕获,包括非捕获组。
在这种情况下,它实际上等同于仅使用外部捕获组:
您是否拥有其他组内的捕获组,非捕获组或任何组。父组将捕获括号内的所有内容"。
当您不需要使用反向引用时,非捕获组是一种优化工具。但不要让这个名字欺骗你:如果他们在另一个组内,那个组仍然会抓住这个匹配。换句话说,他们不会将自己排除在父母群体之外。
@Tushar建议使用([a-zA-Z]+)\d*([a-zA-Z]+)
并同时使用$1$2
捕获的群组反向引用。如果您正在使用正则表达式,这是唯一的方法。