假设我想确保字符串x等于abcd的任何组合(每个字符出现一次或零次 - >每个字符不应重复,但组合可能以任何顺序出现)
我的努力:我尝试了各种技巧:我最接近的是x =〜^(((a)?(b)?(c)?(d)?))$
但是,如果我不按照我写的顺序输入它们,这将不起作用:
您可以在此处测试您的解决方案:http://rubular.com/r/wCpD355bub
PS:字符可能不是按字母顺序排列,也可能是字母顺序
如果您可以使用除正则表达式之外的东西,您可以尝试:
str.chars.uniq.length == str.length && str.match(/^[a-d]+$/)
Run Code Online (Sandbox Code Playgroud)
这里的一般想法是你只是从字符串中删除任何重复的字符,如果uniq数组的长度不等于源字符串的长度,则字符串中有一个重复的字符.然后正则表达式强制执行字符集.
这可能会有所改进,但它非常简单.它确实会创建一些额外的阵列,因此如果需要在性能关键的位置使用它,您可能需要不同的方法.
如果你想坚持正则表达式,你可以使用:
str.match(/^[a-d]+$/) && !str.match(/([a-d]).*\1/)
Run Code Online (Sandbox Code Playgroud)
这基本上会检查字符串是否只包含允许的字符,并且这些字符永远不会重复.