没有双字母的正则表达式字符串

时间:2018-05-20 13:24:26

标签: javascript regex

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

但我不认为这是正确的,因为它不包括ab。 有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

你可以用一个负向前瞻来实现这个目标:



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
  • ^在字符串
  • 的开头断言位置
  • 否定前瞻(?!.*?(.).*?\1):断言下面的正则表达式不匹配
    • .*?匹配任何字符(行终止符除外)
    • *?量词 - 在零和无限时间之间匹配,尽可能少,根据需要进行扩展
    • 第一捕获小组(.)
    • .匹配任何字符(行终止符除外)
    • .*?匹配任何字符(行终止符除外)
    • *?量词 - 在零和无限时间之间匹配,尽可能少,根据需要进行扩展
  • \1匹配与第一个捕获组
  • 最近匹配的文本相同的文本
  • 匹配以下列表中的单个字符[a-z]*
    • *量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • a-z a(索引97)和z(索引122)之间的单个字符(区分大小写)
  • $断言字符串末尾的位置,或者在字符串末尾的行终止符之前(如果有的话) 全局模式标志
  • g修饰符:全局。所有比赛(首场比赛后不返回)

enter image description here