如何检查组中具有不同值的语句?

时间:2016-03-08 14:02:11

标签: regex

组值为(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

3 个答案:

答案 0 :(得分:2)

这是一个正则表达式,可以防止重复的尾随逗号。

/^(?:([abc]),(?!.*\1))*([abc])$/gm

测试包含逗号后跟逗号的可选组。在组内 - 使用负向前瞻以确保相同的角色不会在线上重复它。该组可能会重复多次。最后测试最终字符(不是可选的)。

Example regex101 here

此致

编辑:

回答评论中的问题 - 这里是你如何用令牌/单词做同样的事情:

^(?:(cat|dog|rat),(?!.*\1))*(cat|dog|rat)$

regex101 example

它基本上是相同的正则表达式,但使用带有替换的单词而不是字符类。

答案 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;
  }
}