2017-05-04 66 views
1

比方說,我要趕一個字符串,以下條件Javascript REGEX:只允許特定的字符,以及一些附加條件?

  • 只有這四個具體的字符被允許:hi!
  • 任何人可以出現多次
  • 字符串必須以h
  • (最重要的)開始hi必須至少一次出現(至少爲hi)。

因此,接受(預期)節點可能是:

  • hi
  • hi!
  • hhi !!
  • h ihi !

非可接受,例如:

  • ih! < - becos:無hi
  • h i < - becos:無hi(一起)
  • !hi < - becos:沒從h
  • hi! x < - becos:外部字符

這裏是我試過至今:

var pattern = /^[h]+[i]+[ !]*/i; 

pattern.test("hi"); //true <--- expected (correct) 
pattern.test("hiiih !"); //true <--- expected (correct) 
pattern.test("ihi"); //false <--- expected (correct) 
pattern.test(" hi"); //false <--- expected (correct) 
pattern.test("hixx"); //true <--- not expected (wrong) 

(這意味着(到目前爲止)我可以做所有我需要的,但不能做字符的限制。)

可能是我整個正則表達式應該被修正爲不同的方法。請幫忙。

回答

3

這是正則表達式:

^(?=h)[hi !]*hi[hi !]*$ 
  • ^(?=h):在開始的字符串必須跟一個h
  • [hi !]*:只有字符類[hi !]是acepted
  • hi:在一些點有「hi」
  • [hi !]*$:繼續使用字符類[hi !]直到到達端

See demo

+0

哇它的作品! (這是最短的,可以嗎?):D –

+0

@夏期劇場我猜是這樣的 – horcrux

0
var pattern = /^h+i+[hi !]*$/i; 

該模式必須被1個或更多的 'h' 開始,隨後用1或更多的 'I',那麼可以包含「喜!任何數量直到字符串的末尾。

+2

'h!hi'和'h hi'不匹配 – degant

+0

謝謝。但它不符合'hh hihi!' –

0

在開始時對h使用小的超前和斷言。

(?=.*hi)^h[hi !]+$  

JSFiddle

相關問題