2017-05-04 36 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

相关问题