处理正则表达式中的许多组合

时间:2017-01-24 08:21:53

标签: javascript regex

关注正则表达式:((?: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}

1 个答案:

答案 0 :(得分:3)

要匹配由预定义集合中的唯一字母组成的2个字母的单词,您可以使用

/\b([abc])(?!\1)[abc]\b/

请参阅regex demo

<强>详情:

  • \b - 领先的单词边界
  • ([abc]) - 捕获与abc
  • 匹配的第1组
  • (?!\1)[abc] - abc与前一个字符不同(由于\1反向引用)
  • \b - 一个尾随字边界。

JS示例:

&#13;
&#13;
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;
&#13;
&#13;