【问题标题】:Regex string without double letter [duplicate]没有双字母的正则表达式字符串[重复]
【发布时间】:2018-05-20 13:24:25
【问题描述】:

我的问题是对于不包含双字母的字符串,什么是有效的regex。 我的解决方案是:b(ab)*a + a(ba)*b .

但我认为它不正确,因为它不包括ab。 有人可以帮我吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以通过消极的前瞻来实现这一点:

    const re = /^(?!.*?(.).*?\1)[a-z]*$/g;
    
    let s1 = "abcdefgh", s2 = "abcdefga";
    
    console.log(re.test(s1));
    console.log(re.test(s2));

    它是如何工作的:

    /^(?!.*?(.).*?\1)[a-z]*$/g
    
    • ^ 断言字符串开头的位置
    • Negative Lookahead (?!.*?(.).*?\1): 断言下面的正则表达式不匹配
      • .*? 匹配任何字符(行终止符除外)
      • *? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展
      • 第一捕获组(.)
      • . 匹配任何字符(行终止符除外)
      • .*? 匹配任何字符(行终止符除外)
      • *? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展
    • \1 匹配第一个捕获组最近匹配的相同文本
    • 匹配下面列表中的单个字符[a-z]*
      • * Quantifier — 匹配 0 次和无限次,尽可能多次,按需回馈(贪婪)
      • a-z a(索引 97)和 z(索引 122)之间的单个字符(区分大小写)
    • $ 断言字符串末尾的位置,或字符串末尾的行终止符之前(如果有) 全局模式标志
    • g 修饰符:全局。所有匹配(第一次匹配后不返回)

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2018-09-22
      • 2022-06-15
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      相关资源
      最近更新 更多