2

我需要一个正则表达式,它匹配一个以字母开头和结尾的字符串,其中包含 4-8 个字符:A-z-_.

字符串不得包含两个或多个连续-的 、._ 字符。

没有连续限制的正则表达式是^[A-z][A-z_\\.\\-]{4,8}[A-z]$如何在此处添加限制或者不可能?

我知道在正则表达式中对特定单词进行否定的首选方法是负前瞻,但我不知道如何在这里实现它。

4

2 回答 2

10

您可以预先使用否定前瞻来检查该字符类中没有任何连续字符。试试这个正则表达式:

str.matches("(?!.*([._-])\\1)[A-Za-z][a-zA-Z._-]{4,8}[a-zA-Z]");

解释:

 (?!          // Start negative look-ahead (not followed by)
     .*       // Any string
     (        // Start capture group 1
       [._-]  // Any of ., _, -
     )
     \\1       // \1 (escaped \\1) Same character captured in capture group 1 (avoid consecutive)
 )            // Look-ahead ends
 [A-Za-z]     // Alphabets
 [a-zA-Z._-]  // Any of alphabets, ., -, _
 {4,8}        // repeated 4 to 8 times
 [a-zA-Z]     // ends with alphabet
于 2013-09-19T18:20:08.097 回答
1

使用单独的正则表达式来验证字符串不包含连续字符会更容易:

if(!str.match(/--|\.\.|__/)) {
  // passed the test
}

(这是 JavaScript 语法,翻译成您选择的语言!)

于 2013-09-19T18:17:57.257 回答