用积极的后视解决正则表达式
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$)
那将匹配
_
字面匹配
\K
忘记上一场比赛
[A-Za-z0-9]{3}
匹配 3 次 upper/lower 大小写字符或数字(如果要匹配任何字符,请替换为点)
(?=\.(?i)asc$)
断言后面是小写或大写的点和 asc 并断言字符串结尾的正向前瞻
也使用前瞻
((?<=_)(...)(?=\.(?i)(asc)))
可能这个表达式对你有帮助..
'_201_Bondp0_KGB.ASC'.match(/(?<=_)(...)(?=\.)/g)
正则表达式问题。我想让下面的前四个字符串匹配。输出应该只是 _
和 .
之间的 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$)
那将匹配
_
字面匹配\K
忘记上一场比赛[A-Za-z0-9]{3}
匹配 3 次 upper/lower 大小写字符或数字(如果要匹配任何字符,请替换为点)(?=\.(?i)asc$)
断言后面是小写或大写的点和 asc 并断言字符串结尾的正向前瞻
也使用前瞻
((?<=_)(...)(?=\.(?i)(asc)))
可能这个表达式对你有帮助..
'_201_Bondp0_KGB.ASC'.match(/(?<=_)(...)(?=\.)/g)