用积极的后视解决正则表达式

solving regex with positive lookbehind

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

因此这些将匹配:

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

和应该return分别KG2, KGB, 232, ab3.

这些将不匹配:

_2_ordep16tt.asc __Bndt20_pippo_K.asc

我可以 select 整个街区 _KG2.asc,方法是 ((?<=_)(...)(\.(?i)(asc)))。然而,我只想要KG2。我想我应该进行积极的回顾,但我的尝试都失败了。你能帮帮我吗?

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

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

Regex demo

那将匹配

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

也使用前瞻

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

https://regexr.com/40jfa

可能这个表达式对你有帮助..

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