关注正则表达式:((?:ba*)|(?:ab*))
匹配"ab ba"
,即单词可以是ba或ab。顺序无关紧要。
但是,如果我还要添加"c"
怎么办?顺序应该重要,但这意味着我必须写这样的东西:
(((?:ba*)|(?:a*b))\b|\b((?:bc*)|(?:c*b))) etc...
所以基本上所有这些组合都应该匹配:
ab ba ac ca ca bc cb
在没有正则表达式变得太长的情况下,是否有任何干净的技术来处理这种情况?
注意:我不会因任何原因使用点(。)字符类接受答案。
请注意,每个字母只能在每个组合中出现一次。例如:a {1} b {1}
答案 0 :(得分:3)
要匹配由预定义集合中的唯一字母组成的2个字母的单词,您可以使用
/\b([abc])(?!\1)[abc]\b/
请参阅regex demo
<强>详情:
\b
- 领先的单词边界([abc])
- 捕获与a
,b
或c
(?!\1)[abc]
- a
,b
或c
与前一个字符不同(由于\1
反向引用)\b
- 一个尾随字边界。JS示例:
var chset = "[abc]";
var rx = new RegExp("\\b(" + chset + ")(?!\\1)" + chset + "\\b", "g");
var s = "ab cc aa bb ca ab ba ac ca ca bc cb";
var results = s.match(rx);
console.log(results);
&#13;