正则表达式 - 除"e"之外的任何字母

Ada*_*dam 4 javascript regex

我想为除"e"之外的任何字母表制作正则表达式.这就是我想出的 -

/([a-d]|[f-z])+?/i
Run Code Online (Sandbox Code Playgroud)
  • 上面的正则表达式与"e"不匹配,这是好的.
  • 它匹配"amrica"
  • 但它也与"美国"相匹配,但它不应该因为美国的"e"而存在

我究竟做错了什么?

Wik*_*żew 10

您可以使用[a-z]字符类,但使用否定前瞻来限制它,使用分组构造将此模式分组并在模式周围添加锚点: (?!e)(?:...)

/^(?:(?!e)[a-z])+$/i
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

这种技术适用于所有支持前瞻的正则表达式。请注意,在 Java 和其他一些语言中,您可以使用字符类减法,但 JS RegExp(也不支持 Python re)不支持它。例如,在 Java 中,您可以使用s.matches("(?i)[a-z&&[^e]]+").

图案详情

  • ^ - 字符串的开始
  • (?:(?!e)[a-z])+- 1 个或多个字符来自a-zA-Z范围但eE
  • $ - 字符串锚点的结尾
  • i - 不区分大小写的修饰符。

JS演示:


Psi*_*dom 5

你需要锚点^(字符串的开头)和$(字符串的结尾); 否则你的模式可以部分匹配任何字符串,只要它包含e以外的字母:

/^[a-df-z]+$/i.test("america")
// false

/^[a-df-z]+$/i.test("amrica")
// true

/^[a-df-z]+$/i.test("e")
// false
Run Code Online (Sandbox Code Playgroud)