首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不包含两个或多个连续字符的正则表达式

不包含两个或多个连续字符的正则表达式
EN

Stack Overflow用户
提问于 2013-09-19 18:14:35
回答 2查看 5K关注 0票数 2

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

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

没有连续限制的Regex是^[A-z][A-z_\\.\\-]{4,8}[A-z]$,如何在这里添加一个限制,或者可能是不可能的?

我知道,在regex中对特定单词进行否定的一种更好的方法是负展望,但我不知道如何在这里实现它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 18:20:08

您可以预先使用负面的前瞻性来检查该字符类中没有任何连续字符。尝试使用这个regex:

代码语言:javascript
复制
str.matches("(?!.*([._-])\\1)[A-Za-z][a-zA-Z._-]{4,8}[a-zA-Z]");

解释:

代码语言:javascript
复制
 (?!          // 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
票数 10
EN

Stack Overflow用户

发布于 2013-09-19 18:17:57

使用单独的regex验证字符串不包含连续字符会更容易:

代码语言:javascript
复制
if(!str.match(/--|\.\.|__/)) {
  // passed the test
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18902089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档