组值为(a|b|c)
正则表达式将为这些语句提供以下输出:
a (True)
a,b (True)
b,c (True)
b,c,a (True)
a, (false) -no value after ','
a,a (false) -Repeated values
b,b (false) -Repeated values
答案 0 :(得分:2)
这是一个正则表达式,可以防止重复的和尾随逗号。
/^(?:([abc]),(?!.*\1))*([abc])$/gm
测试包含逗号后跟逗号的可选组。在组内 - 使用负向前瞻以确保相同的角色不会在线上重复它。该组可能会重复多次。最后测试最终字符(不是可选的)。
此致
编辑:
回答评论中的问题 - 这里是你如何用令牌/单词做同样的事情:
^(?:(cat|dog|rat),(?!.*\1))*(cat|dog|rat)$
它基本上是相同的正则表达式,但使用带有替换的单词而不是字符类。
答案 1 :(得分:0)
您想要在集合{a,b,c}中找到一组昏迷的群组列表,但您不需要任何其他尾随逗号。我想你也不想要缺少元素(连续的昏迷)。
我建议:
^([a|b|c],)*[a|b|b]$
并提出一点解释:
第一部分([A-Za-z]+,)*
搜索alpha元素,每个元素后跟一个逗号。。可以有任何数量的这些元素。这些是n个元素列表中的1,2,3 ... n-1个元素。
然后最后一部分[a|b|c]
寻找最终元素。
整个字符串被^[stuff]$
包围,强制正则表达式匹配整个输入字符串,从开始到结束。
试一试here。 (我不隶属于这个网站)
希望这会有所帮助。
答案 2 :(得分:-1)
正则表达式不是解决此问题的唯一方法。
如果你想在没有正则表达式的情况下看看如何做到这一点,这里有一些JavaScript代码,演示了如何做到这一点。如果您希望通过ClasG与 here's a cool little fiddle I made 一起使用正则表达式来完整演示它。
var regexReplacement = function(input) {
var acceptableStrings = ["a", "b", "c"];
var arr = input.split(",");
if (arr.indexOf("") == -1 && (new Set(arr)).size == arr.length) {
return arr.every(function(val) {
return acceptableStrings.some(function(acceptable) {
return val === acceptable;
});
});
} else {
return false;
}
}