我的问题是对于不包含双字母的字符串,有效regex
是什么。
我的解决方案是:b(ab)*a + a(ba)*b .
但我不认为这是正确的,因为它不包括a
或b
。
有人能帮助我吗?
答案 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
修饰符:全局。所有比赛(首场比赛后不返回)