Regex -除“e”以外的任何字母表

wfveoks0  于 2023-06-07  发布在  其他
关注(0)|答案(5)|浏览(390)

我想为除了“e”以外的任何字母表创建一个正则表达式,这是我想到的-

/([a-d]|[f-z])+?/i
  • 上面的正则表达式不匹配“e”,这是好的。
  • 和“amrica”吻合
  • 但它也符合“美国”但它不应该因为“E”在美国

我做错了什么?

slhcrj9b

slhcrj9b1#

现代解决方案

随着v flag的采用,JavaScript正则表达式模式现在支持character class union, intersection and subtraction.在这种情况下,字符类减法是必要的:

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

因此,[[a-zA-Z]--[eE]]+匹配A-Z和a-z范围中出现的一个或多个字母,但eE除外。
另请参阅有关 * 与&& * 和 Union 的交集的更多信息。

遗留解决方案

你可以使用[a-z]字符类,但是用negative lookahead(?!e)限制它,用分组结构(?:...)将这个模式分组,并在模式周围添加锚点:

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

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

图案详情

  • ^-字符串的开头
  • (?:(?!e)[a-z])+-a-zA-Z范围内的1个或多个字符,但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));
}
raogr8fs

raogr8fs2#

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

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

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

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

ltqd579y3#

您也可以在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

kh212irz

kh212irz4#

以下是几个可供选择的答案:
1.使用前瞻:

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

首先检查下一个字符是否是字母,然后 * 检查它是否不是e(或E)。
这是JavaScript中有效的正则表达式语法,但性能不如公认的答案。
1.使用集合交集:

/^[[a-z]&&[^e]]+$/i

这是匹配“a-z“和“not e“的 *set交集 * 中的字符。
这是JavaScript中无效的语法。但是,它与公认的答案具有相同的性能。它只在其他各种regex“风格”中有效,如Java,Perl,PHP,Python和Ruby。
1.使用集减法:

/^[[a-z]--[e]]+$/i

这是匹配“a-z”和e的 * 集合减法 * 中的字符。
这是JavaScript中无效的语法。但是,它与公认的答案具有相同的性能。它只在其他各种regex“风格”(如Python和. Net)中有效。(语法也略有不同,例如。---。)

r7s23pms

r7s23pms5#

为什么不一步一步地遍历单词中的每个字符呢?

[i for i in strs if 'e' not in i]

相关问题