Javascript 如果后跟其他表达式JS,则拒绝完整正则表达式

Javascript 如果后跟其他表达式JS,则拒绝完整正则表达式,javascript,regex,conditional-statements,Javascript,Regex,Conditional Statements,嗨,伙计们,我试图找到“Horas extras”这个表达,但是如果后面跟着“No Aprobadas”,请拒绝完整的表达。 例如,不必考虑这些情况 “Horas extras no aprobadas” “Horas extra no aprobadas” “Hora extras no aprobada” 我的正则表达式如下 horas?\s+extras?(?!\s+no\s+Aprobadas?)/gmi 我是 我有这个测试链接 您可以使用一个 看 每当正则表达式引擎找不到匹配项时,它会

嗨,伙计们,我试图找到“Horas extras”这个表达,但是如果后面跟着“No Aprobadas”,请拒绝完整的表达。 例如,不必考虑这些情况 “Horas extras no aprobadas” “Horas extra no aprobadas” “Hora extras no aprobada”

我的正则表达式如下 horas?\s+extras?(?!\s+no\s+Aprobadas?)/gmi

我是

我有这个测试链接

您可以使用一个

每当正则表达式引擎找不到匹配项时,它会检查所有其他可能的路径,以便在当前位置找到有效匹配项。它被称为回溯。当模式包含允许匹配可变数量字符的量词时,正则表达式引擎返回到它们并从该位置重试匹配

因此,在您的情况下,由于
s?
可以匹配1或0
s
字符,一旦前瞻失败,正则表达式引擎将返回
horasextra
并检查
extra
之后是否有
\s+no\s+Aprobadas
模式。没有,因此负前瞻返回一个有效匹配的
horasextra
。见:

请参见,最后两个步骤显示了如何在
a
之后和
s
之前找不到先行模式(
s
\s+
不匹配)

单词边界要求在
extra
extras
之后有一个非单词字符或字符串结尾,因此如果引擎想要回溯到
s
之前的位置,则不可能有匹配项(那里没有单词边界位置)


请注意,如果您有
horas?\s+extra(?!\s+no\s+Aprobadas)
regex,则不会出现此类问题。在向前看之前,除了
extra
之外,没有其他方法可以匹配字符串,因此不需要单词边界。

尝试
/\bhoras?\s+extras?\b(?!\s+no\s+Aprobada)/ig
难以置信的朋友,它现在正在工作!!如果你问得不多,你能给我解释一下吗?please@MarcoFeregrino因为可选的
s
。表达式与
hora extra
匹配,因为在
s之后没有Aprobadas
。这就是为什么你需要一个好朋友。现在我更明白了。类似于要考虑的表达式的包装器。真的谢谢你,伙计
/\bhoras?\s+extras?\b(?!\s+no\s+Aprobada)/ig