正则表达式问题。我想让下面的前四个字符串匹配。输出只能是_
和.
之间的3个字符。
因此这些将匹配:
_20101_Bp16tt20_KG2.asc
_201_Bondp0_KGB.ASC
_2011_rndiep16tt20_232.AsC
_20101_odiep16tt20_ab3.ASC
,并应分别返回KG2
,KGB
,232
,ab3
。
这些将不匹配:
_2_ordep16tt.asc
__Bndt20_pippo_K.asc
通过执行_KG2.asc
,我可以选择整个块((?<=_)(...)(\.(?i)(asc)))
。但是,我只想要KG2
。我认为我应该积极地回头,但是我的尝试都以失败告终。你能帮我吗?
答案 0 :(得分:2)
您可以使用\K
和积极的前瞻:
_\K[A-Za-z0-9]{3}(?=\.(?i)asc$)
那会匹配
_
字面上匹配\K
忘记上一场比赛[A-Za-z0-9]{3}
匹配3个大写/小写字符或数字(如果要匹配任何字符,请用点替换)(?=\.(?i)asc$)
积极前瞻,断言其后是小写或大写的点和升序,并断言字符串的结尾答案 1 :(得分:2)
答案 2 :(得分:0)
也许这种表达方式正在帮助您。
'_201_Bondp0_KGB.ASC'.match(/(?<=_)(...)(?=\.)/g)