在Java应用程序中,我使用此正则表达式:(\ w +)_ \ d 来匹配此表单的模式:
@Component({
selector: 'compLogin'
})
@View({
template: `<div>CompLogin</div><button (click)="onClick()">Click</button>
<router-outlet></router-outlet>`,
directives: [RouterOutlet]
})
然后我使用第一个捕获组值(苹果,橙子)。
但是,我现在有一个新请求也匹配这些字符串:
apples_1
oranges_2
其中'drp'是一个固定的3个字符的字符串,需要捕获与之前相同的值:apples,oranges
例如,如果我使用这个正则表达式:(\ w +)(?:drp)?_ \ d 它将在apples_1上完成工作,但不适用于applesdrp_1。
有没有办法用正则表达式做到这一点?
答案 0 :(得分:3)
你可以使用非贪婪的量词:
(\w+?)(?:drp)?_\d
这样\w+?
会占用字符,直到找到"drp_N"
或"_N"
(其中N是数字)。
如果您使用贪婪量词,\w+
将获取所有可能的字符(包括下划线和数字,因为它们包含在\w
中),然后逐个返回字符,直到(?:drp)?_\d
成功。但由于(?:drp)?
是可选的,因此正则表达式引擎会在找到_N
时停止回溯。
答案 1 :(得分:1)
是的,你可以 - 一种方式是使用负面的后视,以确保drp被强制在组外,如果它存在
(\w+)(?<!drp)(?:drp)?_\d+