【发布时间】:2018-05-20 13:24:25
【问题描述】:
我的问题是对于不包含双字母的字符串,什么是有效的regex。
我的解决方案是:b(ab)*a + a(ba)*b .
但我认为它不正确,因为它不包括a 或b。
有人可以帮我吗?
【问题讨论】:
标签: javascript regex
我的问题是对于不包含双字母的字符串,什么是有效的regex。
我的解决方案是:b(ab)*a + a(ba)*b .
但我认为它不正确,因为它不包括a 或b。
有人可以帮我吗?
【问题讨论】:
标签: javascript regex
您可以通过消极的前瞻来实现这一点:
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): 断言下面的正则表达式不匹配
.*? 匹配任何字符(行终止符除外)*? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展(.)
. 匹配任何字符(行终止符除外).*? 匹配任何字符(行终止符除外)*? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展\1 匹配第一个捕获组最近匹配的相同文本[a-z]*
* Quantifier — 匹配 0 次和无限次,尽可能多次,按需回馈(贪婪)a-z a(索引 97)和 z(索引 122)之间的单个字符(区分大小写)$ 断言字符串末尾的位置,或字符串末尾的行终止符之前(如果有)
全局模式标志g 修饰符:全局。所有匹配(第一次匹配后不返回)【讨论】: