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

时间:2017-06-27 03:16:13

标签: javascript regex

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

/([a-d]|[f-z])+?/i
  • 上述正则表达式与“e”不匹配。
  • 匹配“amrica”
  • 但它也与“美国”相匹配,但它不应该因为美国的“e”而

我做错了什么?

4 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:3)

您可以使用[a-z]字符类,但使用negative lookahead (?!e)限制,将此模式与分组构造(?:...)分组,在模式周围添加锚点:

/^(?:(?!e)[a-z])+$/i

请参阅regex demo

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

模式详情

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

JS演示:



var rx = /^(?:(?!e)[a-z])+$/i;
var strs = ['america','e', 'E', 'world','hello','welcome','board','know'];
for (var s of strs) {
  console.log(s, "=>", rx.test(s));
}




答案 2 :(得分:1)

您还可以在reg中使用此项添加资本:

^[a-df-zA-DF-Z]+$

i.test("America")
// false

i.test("Amrica")
// true

i.test("e")   or  i.test("E") 
// false

请参考许多在线网站,逐步学习正则表达式创建 https://regex101.com

答案 3 :(得分:0)

另外几个答案是:

  1. 使用前瞻:

    /^((?=[a-z])[^e])+$/i
    
  2. 首先检查下一个字符是否为字母,然后检查它不是e(或E)。

    这是JavaScript中的有效正则表达式语法,但其性能低于接受的答案。

    1. 使用set intersection:

      /^[[a-z]&&[^e]]+$/i
      
    2. 这是“a-z”和“不e”的集合交集中匹配的字符。

      这是 JavaScript中无效的语法。但是,它与公认的答案同样具有高效性。它只是Java,Perl,PHP,Python和Ruby等各种其他正则表达式“有形”的有效语法。

      1. 使用set subtraction:

        /^[[a-z]--[e]]+$/i
        
      2. 这是“a-z”和e集合减法中匹配的字符。

        这是 JavaScript中无效的语法。但是,它与公认的答案同样具有高效性。它只是Python和.Net等各种其他正则表达“风格”中的有效语法。 (语法也略有不同,例如---。)