[英]Regex - any alphabet except "e"
我想為除“e”之外的任何字母創建正則表達式這就是我想出的-
/([a-d]|[f-z])+?/i
我究竟做錯了什么?
你需要錨點^
(字符串的開頭)和$
(字符串的結尾); 否則你的模式可以部分匹配任何字符串,只要它包含e以外的字母:
/^[a-df-z]+$/i.test("america")
// false
/^[a-df-z]+$/i.test("amrica")
// true
/^[a-df-z]+$/i.test("e")
// false
您可以使用[az]
字符類,但使用負前瞻 (?!e)
限制它,使用分組構造(?:...)
對此模式進行分組,並在模式周圍添加錨點:
/^(?:(?!e)[a-z])+$/i
請參閱正則表達式演示 。
這種技術適用於支持前瞻的所有正則表達式。 注意在Java和其他一些語言中,您可以使用字符類減法 ,但JS RegExp(也不是Python re
)不支持它。 例如,在Java中,您可以使用s.matches("(?i)[az&&[^e]]+")
。
圖案細節 :
^
- 字符串的開頭 (?:(?!e)[az])+
- 來自az
和AZ
范圍的1個或更多字符但是e
和E
$
- 字符串錨的結束 i
- 不區分大小寫的修飾符。 JS演示:
var rx = /^(?:(?!e)[az])+$/i; var strs = ['america','e', 'E', 'world','hello','welcome','board','know']; for (var s of strs) { console.log(s, "=>", rx.test(s)); }
你也可以在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
另外幾個答案是:
使用前瞻:
/^((?=[az])[^e])+$/i
這首先檢查下一個字符是否為字母, 然后檢查它不是e
(或E
)。
這是JavaScript中的有效正則表達式語法,但其性能低於接受的答案。
使用set intersection:
/^[[az]&&[^e]]+$/i
這是“ az
”和“not e
”的集合交集中的匹配字符。
這不是JavaScript中的有效語法 。 但是,它與公認的答案同樣具有高效性。 它只是各種其他正則表達式“風格”中的有效語法,如Java,Perl,PHP,Python和Ruby。
使用set減法:
/^[[az]--[e]]+$/i
這是“ az
”和e
的集合減法中的匹配字符。
這不是JavaScript中的有效語法 。 但是,它與公認的答案同樣具有高效性。 它只是Python和.Net等各種其他正則表達“風格”中的有效語法。 (語法也略有不同,例如-
vs --
。)
為什么不遍歷單詞中的每個字符?
[i for i in strs if 'e' not in i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.