在html5模式中使用负向lookbehind和lookahead

时间:2017-07-22 20:09:18

标签: regex html5 regex-lookarounds

我已经尝试查看了很多关于如何在html5模式的正则表达式函数中使用负向lookbehind和lookahead的正则表达式指南。

我正在尝试匹配以下模式,其中字符串必须以[a-z]字母开头和结尾。该字符串最长可达30个字符。也可以包含符号:-,但它连续不能有多个-

Sooo,到目前为止我想出的是:

^[a-z][a-z(?<!-(-)?!-)]{0,28}[a-z]$

现在我无法获得前瞻和后视,所以工作正常,我不太确定我是否正确实现了最多30个字符。但是,我尝试以[a-z]开头和结尾,它运行正常。

一些示例字符串:

'a-b' => true
'a-' => false
'-a' => false
'a--b' => false
'ab-cd' => true
'abc' => true
'a-b-c' => true

2 个答案:

答案 0 :(得分:3)

您可以使用此模式:

([a-z]|\b-\b){1,30}

单词边界可以防止连字符连续或处于字符串限制。

请注意,pattern属性中不需要^$,因为它们是隐式的。

demo

答案 1 :(得分:2)

您需要使用

^(?!.{31})[a-z]+(?:-[a-z]+)*$

请参阅regex demo

请注意,在HTML5 模式属性中,默认情况下通常不需要锚点,因为默认情况下模式会固定在两侧。

<强>详情

  • ^ - 字符串开头
  • (?!.{31}) - 除了换行符之外不能有31个字符(如果匹配模式匹配,则此(?!...)是一个未通过匹配的否定前瞻)(您也可以使用正向前瞻 - { {1}} - 字符串中需要1到30个字符)
  • (?=.{1,30}$) - 一个或多个小写ASCII字母
  • [a-z]+ - 零个或多个序列:
    • (?:-[a-z]+)* - 连字符
    • - - 一个或多个小写ASCII字母
  • [a-z]+ - 字符串结束。