组值(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
组值(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
这里是一个正则表达式,用于防止重复项和尾随逗号。
/^(?:([abc]),(?!.*\1))*([abc])$/gm
它测试包含字符后跟一个逗号一个可选基。在组内 - 使用负向预测来确保相同的字符不会在线上自行重复。这个组可能重复任何次数。最后测试最终字符(不可选)。
问候
编辑:
在回答在评论一个问题 - 这里是你如何可以做同样的代币/词:
^(?:(cat|dog|rat),(?!.*\1))*(cat|dog|rat)$
它基本上是相同的正则表达式,但使用替代字符类的替代字。
你想找到在中集集团昏迷sperated列表{A,B,C},但你不需要任何额外的尾随昏迷。我想你也不想缺少元素(连续的昏迷)。
我提出这样的:
^([a|b|c],)*[a|b|b]$
,并提出一点解释:
,第一部分([A-Za-z]+,)*
搜索每个字母元素跟一个逗号。。可以有任何数量的这些元素。这些是n个元素列表中的1,2,... n-1个元素。
然后这最后部分[a|b|c]
寻找最后元素。
整个字符串被^[stuff]$
包围,从而强制正则表达式匹配整个输入字符串,从开始到结束。
试试吧here。 (我不隶属于这个网站)
希望这对我有所帮助。
只是播种,你不想重复。运气不好,我不认为这是可能的。我建议使用上面的方法,然后扫描一次'。* a。*'然后扫描'。* b。*',最后扫描'。* c。*'并请求最后3次扫描的匹配次数为< 1 –
这匹配重复。不正确 – 4castle
,但这会给我一个重复的阿尔法这样的,a或b,b :( –
正则表达式不是解决此问题的唯一方法。
如果您想了解如何在没有正则表达式的情况下执行此操作,以下是一段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;
}
}
您的问题不清楚,请澄清一下。 – Maroun
@WiktorStribiżew这将匹配a,a和b.b,不是吗? –
@ChrisLear:当然,前瞻是必要的。 –