正则表达式不匹配序列中的两个相同字符
Regular expression to not to match two same character in the sequence
我知道这对你们来说很简单,但我很难在下面的字符串中找到匹配的正则表达式。尝试过不同的reg ex,但每次都失败了。以下是需要匹配/不匹配的字符串。
S__ATHEESH – not match
S_A_T_HEESH – match
S’_ATHEESH – match
S’’ATHEESH – not match
S-A_THEESH - match
这是的要求
a. A name can have the special characters – space, apostrophe, underscore and hyphen.
b. There can be more than 1 special character in a name, but same special character cannot repeat more than once continuously.
c. There should be minimum 2 characters entered in the name field
我有下面的reg ex,需要修改
^([a-zA-Z]+[ _'-])*[a-zA-Z]+$
谢谢你的帮助。
以下正则表达式将满足您的要求:
^(?=.{2})(?:[a-zA-Z]+|([ _’'-])(?!'1))+$
^
断言字符串开头的位置(?=.{2})
至少2个字符- 和(:
[a-zA-Z]+
至少一个字母字符
- 或:
([ _’'-])
在捕获组1中捕获的空格、下划线、魔撇号、撇号或破折号(?!'1)
否定地认为刚刚捕捉到的不是下一个角色
- )
+
尽可能多次 $
断言字符串末尾的位置
演示
您可以使用类似的基于前瞻性的解决方案
/^(?!.*([-_ ’])'1)(?=(?:[^a-z]*[a-z]){2})[-_ ’a-z]+$/i
(?!.*([-_ ’])'1)
检查,没有双重特殊字符(?=(?:[^a-z]*[a-z]){2})
检查是否存在至少两个字母- 如果仅存在允许的字符,则
^[-_ ’a-z]+$
匹配
为了避免一直写a-zA-Z
,我使用了case insenstive修饰符。我不确定’
是正确的连字符,但它就是您使用的那个。
下面是一个演示:https://regex101.com/r/fD1gV0/1
如果我错了,请纠正我,但您的要求只是不包含2个空格(或撇号、下划线或连字符)的字符串。
在RegEx地区,AFAICT,断言"不是"并不简单,但要求似乎足够简单,可以反过来处理:
( |__|''|’’)
将匹配您标记为"不匹配"的内容,所以您只需要否定布尔匹配结果。
祝你好运。
编辑:只是为了确保我没有被误解。我并不是说你不能完全按照手术的要求去做,我只是说否定这个要求要简单得多,更容易由其他人来维护。
相关文章:
- 如何在jQuery中搜索两个字符之间的字符串
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- 电子邮件验证不接受仅包含两个字符的域
- 如何完成此循环?连接前面的两个字符
- 如何使用jQuery获取url的最后两个字符
- Javascript-使用Regex获取两个字符之间的字符
- Regex表达式,用于替换两个字符(包括字符)之间的字符串
- 通过JQuery在网页上的两个字符之间放置空格
- 如何匹配两个字符内的重复模式
- Regex/Javascript;否定地选择两个字符的重复
- 如何提取两个字符之间的字符串
- 正则表达式获取两个字符之间的所有内容
- 如何根据 javascript 中的两个字符比较从另一个字符串中提取字符串
- JavaScript - 将两个字符相互替换
- 如何选择字符串的最后两个字符
- 如何在 JavaScript 中替换字符串的前两个字符
- 替换/删除两个字符之间的所有内容
- 如何在 JavaScript 中替换字符串中最后一个出现的两个字符之间的字符
- 使用Split将字符串拆分为两个字符的组
- 检索两个字符之间的子字符串