2016-07-08 80 views
2

我有這樣的規則的Javascript正則表達式的非連續字符

var reg = new RegExp('[a-z]{3}'); 

這意味着它是允許A-Z和至少出現3次之間使用的字符。 所以,我想知道是否有一種方法來匹配這個規則與非順序字符。

換句話說,

"abc" => valid 
"aaa" => not valid 

謝謝!

+0

「aba」應該是有效的,還是您不希望字符被多次使用? (另外,我將「abc」描述爲連續字符,將「aaa」描述爲重複字符。) – nnnnnn

+0

'{3}'*正好* 3個字符,'{3}} *至少* 3。 – maraca

+0

,你可能需要錨太多'^ ... $',因爲我不認爲你想接受一個4字母字符串的3個字符,或者你呢? – maraca

回答

1

這裏是恰好3工作的正則表達式(或N)的字符,如果數量是不固定的它變得更加複雜:

^([a-z])(?!\1{2})[a-z]{2}$ 
1 2 3 4 5 6 7 8 

說明:

  1. ^的開頭相匹配字符串
  2. ([a-z])匹配接受的字符之一併保存它(組1)
  3. (?!...)負先行,什麼是在那些括號不被接受
  4. \1參照第一組(此處第一個字符)
  5. {2}重複正好兩次
  6. [a-z]所接受的字符
  7. {2}重複正好兩次
  8. $匹配字符串的末尾

Link here(我添加了gm修飾符,以便可以測試幾個表達式。)

+0

太棒了!對於任何想要使其不區分大小寫且包含2-11個字符之間的數字的人,^(\ w)(?!\ 1 {2})\ w {1,10} $非常令人印象深刻的正則表達式先生! –

+0

@SteveKline謝謝。我認爲你的正則表達式檢查,第一個字符不重複三次,如果你想在任何位置檢查它的長度,那麼它會變得非常棘手(不知道它是否可能)。 – maraca

+0

感謝隊友,它解決了我的問題! \ O / –

0

嘗試使用排除前瞻(?![a-z]{3}),它將而不是匹配3個相等字符的順序。

+0

這不起作用:[Regex101](https://regex101.com/r/rM9bQ6/1)。 –

相關問題