Javascript REGEX:仅允许具有一些附加条件的特定字符?

时间:2017-05-04 15:19:48

标签: javascript regex

假设我想捕捉字符串,并遵循条件

  • 仅允许这四个特定字符:hi!
  • 其中任何一个都可以多次出现
  • 字符串必须以h
  • 开头
  • (最重要的) hi必须一起出现(作为hi)至少一次。

因此,接受(预期)可能是:

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

不可接受,例如:

  • ih!< - becos:no hi
  • h i< - becos:no hi(在一起)
  • !hi< - becos:未以h
  • 开头
  • hi! x< - becos:external character(s)

这是我到目前为止所尝试的内容:

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)

(这意味着(到目前为止)我可以完成我所需要的一切,但不能进行字符限制。)

可能是我的整个REGEX应该纠正为不同的方法。请帮忙。

3 个答案:

答案 0 :(得分:4)

这是正则表达式:

^(?=h)[hi !]*hi[hi !]*$
  • ^(?=h):字符串的开头必须后跟h
  • [hi !]*:只有字符类[hi !]被列为
  • hi:在某些时候有“hi”
  • [hi !]*$:继续使用角色类[hi !],直至到达结尾

See demo

答案 1 :(得分:0)

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

模式必须以1或更多'h'开头,然后是1或更多'i',然后可以包含'hi!'以任何数量直到字符串的末尾。

答案 2 :(得分:0)

在开头使用小的前瞻和断言h。

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

JSFiddle