我觉得这个正则表达式模式应该有效,但它没有

I feel like this regex pattern should work but it doesn't

我是正则表达式的新手,老实说没有那么有经验。 我得到了我想尝试使用的正则表达式模式。

/(a..e.)([a-zA-Z])/gi

计划是它应该匹配任何遵循该模式的单词。所以我可以遍历单词列表,并将 A 锁定在倒数第二个位置的 E 的第一个位置。它会找到所有匹配的单词。但是我 运行 遇到了一个问题。我希望它与单词 ADDER 匹配,但事实并非如此。当我删除最后一个句点时,模式变为

/(a..e)([a-zA-Z])/gi

确实有效。这两者不应该基本相同吗?因为我们使用通配符点?

使用 https://regexr.com/

(a..e.)([a-zA-Z]) 模式查找 a,之后必须有任意两个字符(换行符除外),然后是一个 e 字母,然后是任何一个换行符以外的字符。此模式既不能保证您匹配整个单词,也不能保证与 . 匹配的字符将是字母。

/(a..e.)([a-zA-Z])/gi 不等于 /(a..e)([a-zA-Z])/gi,因为它们匹配和使用不同的字符串。由于 e 之后没有 .,第二个模式匹配的字符较少,除了在任何单个字母之前的 e 字母(最后一个模式部分)之后的换行字符之外,不允许任何单个字符.

要匹配以 a 字母开头的单词,后跟两个字母,然后是 e 字母,然后是另一个字母,您可以使用

/\ba[a-z]{2}e[a-z]\b/gi

参见regex demo详情:

  • /gi - 以不区分大小写的方式匹配所有出现的 (g) (i)
  • \b - 匹配单词边界
  • a - a / A
  • [a-z]{2} - 两个 ASCII 字母
  • e - e 字母
  • [a-z] - 任何 ASCII 字母
  • \b - 匹配单词边界。