我正在寻找一个正则表达式(在JS中,但我不认为这很重要),它匹配某个字符串的所有大写/小写可能性但只有一个。
示例:让我的字符串为" aBc"。然后我的正则表达式应该匹配如下
var regex=/ABC|ABc|AbC|Abc|aBC|abC|abc/g;
在这种情况下,可以将其拼写出来但通常带有n个字符的字符串允许2 ^ n-1个字符串匹配。对于大n来说,这已经不再适合了。因此,我寻找另一种方式。
编辑:由于你们中的许多人似乎没有明白我的观点:正则表达式必须与#34; aBc"不匹配。所以它就像/ abc / i而不是/ aBc /.
为简单起见,您可以检查表达式是否完成了它应该在此处执行的操作:http://regex101.com/r/kP5aX2
你的正则表达式应该与我的完全匹配。
答案 0 :(得分:4)
尝试
var regex = /(?!aBc)[a-cA-C]{3}/g;
(?!aBc)
是一个所谓的负向前瞻,应该可以实现你想要的技巧。
<强>更新强>
参考评论......
var regex = /((?![a-zA-Z]*aBc[a-zA-Z]*)[a-zA-Z]*[aA][bB][cC][a-zA-Z]*)/g;
更新2
如果你不想匹配整个单词,但只有3个字符的字符串,你应该这样做
var regex = /(?!aBc)[aA][bB][cC]/g;
答案 1 :(得分:0)
假设您的字符串只是'abc'或'AbC'等,这将有效:
/(?!aBc)[aA][bB][cC]/g
答案 2 :(得分:0)
怎么样:
/\b(?!aBc)(?i)abc\b/
这将匹配abc
,abC
,...除aBc
之外的所有字词。
如果您想在单词中匹配abc
,请删除单词边界:
/(?!aBc)(?i)abc/
答案 3 :(得分:0)
由于喷嘴,我找到了一个非常好的解决方案:
var regex=/(?!aBc)(?i)aBc/g;
我非常喜欢这个解决方案,因为代替“aBc”你可以插入任何其他字符串(你只需要做两次,因为字符串在正则表达式中出现两次)。这是我正在寻找的那种解决方案,因为我需要不同长度的许多不同字符串的表达式。
答案 4 :(得分:0)
匹配abc
而不是小型大小的形式
使用这种模式:
(?![a-z][A-Z][a-z])(?i)abc
Demo