正向查找正则表达式

时间:2018-10-03 16:31:51

标签: regex pcre lookbehind

正则表达式问题。我想让下面的前四个字符串匹配。输出只能是_.之间的3个字符。

因此这些将匹配:

_20101_Bp16tt20_KG2.asc _201_Bondp0_KGB.ASC _2011_rndiep16tt20_232.AsC _20101_odiep16tt20_ab3.ASC

,并应分别返回KG2KGB232ab3

这些将不匹配:

_2_ordep16tt.asc __Bndt20_pippo_K.asc

通过执行_KG2.asc,我可以选择整个块((?<=_)(...)(\.(?i)(asc)))。但是,我只想要KG2。我认为我应该积极地回头,但是我的尝试都以失败告终。你能帮我吗?

3 个答案:

答案 0 :(得分:2)

您可以使用\K和积极的前瞻:

_\K[A-Za-z0-9]{3}(?=\.(?i)asc$)

Regex demo

那会匹配

  • _字面上匹配
  • \K忘记上一场比赛
  • [A-Za-z0-9]{3}匹配3个大写/小写字符或数字(如果要匹配任何字符,请用点替换)
  • (?=\.(?i)asc$)积极前瞻,断言其后是小写或大写的点和升序,并断言字符串的结尾

答案 1 :(得分:2)

也要提前使用

((?<=_)(...)(?=\.(?i)(asc)))

请参见https://regexr.com/40jfa

答案 2 :(得分:0)

也许这种表达方式正在帮助您。

'_201_Bondp0_KGB.ASC'.match(/(?<=_)(...)(?=\.)/g)