RegExp 帮助(工作但需要排除)

RegExp help (working but need an exclusion)

我需要一些正则表达式帮助。

我有一个这样的列表:

/hours_3203
/hours_3204
/hours_3205
/hours_3206
/hours_3207
/hours_3208
/hours_3309
/hours_3310
/hours_3211

我正在使用此正则表达式查找以 32 或 33 开头的所有条目:

/hours_3[23]/

这是有效的。

然而,当我被告知我需要排除 hours_3211 在此列表中的匹配时,我被扔了一个曲线球。

如何调整正则表达式以匹配所有 hours_3[23] 但不匹配 /hours_3211

或者,当我有这样的列表时:

/hours_3412
/hours_3413
/hours_3414
/hours_3415
/hours_3516
/hours_3517
/hours_3518
/hours_3519

我一直在使用正则表达式:

/hours_3[45]/

找到所有 hours_34x/hours_35x

我该如何调整:

/hours_3[45]/

找到上面的但是也在 find/match /hours_3211??

How can I adjust my regex to match on all hours_3[23] but NOT match on hours_3211?

您可以使用插入负先行子模式:

/hours_3(?!211)[23]/

(?!211) 是在 hours_3 之后不允许 211 的否定前瞻,因此不允许 hours_3211

我假设你将 3211 添加到第二个正则表达式中,就像这样....

hours_(3[45]|3211)

第一个是负前瞻

hours_3[23](?!11)

How can I adjust my regex to match on all hours_3[23] but NOT match on hours_3211?

使用否定前瞻(?!):

/hours_3(?!211)[23]/

How I can adjust /hours_3[45]/ to find the above but ALSO find/match on /hours_3211?

交替使用|:

/hours_3(?:[45]|211)/

编辑:

更恰当的说,上面只说明匹配与否。如果您想要返回实际的完整匹配,您需要将 .* 添加到 RegExp 的末尾,如下所示:

/hours_3(?!211)[23].*/
/hours_3(?:[45]|211).*/