开发正则表达式,每个A后跟一个B.

时间:2016-04-05 00:46:26

标签: regex

我想开发一个具有以下功能的正则表达式:

  1. 每个“A”后跟一个“B”,我想到的就是我们可以拥有(A [C-Z] * B)+

  2. B不需要在A之后立即出现。话虽如此,ACCB也没关系。

  3. 当存在多个A时,也应该出现相同数量的B.这使它有点棘手,因为AABB,AAABBB,AXXXBAXXB,AXXAXXBXXAXXBXXB也应该没问题。我对此感到困惑。
  4. 只允许使用大写字母。
  5. 接受的字符串: AABB

    AXXBAXXB

    AXXXXBXXAXXB

    ABABABABAB

    不接受:

    AAAAB

    AABBBB

    BBBBAAAA

    AXXXBBBAAA

    我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我知道OP说它必须是一个正则表达式,但我同意@tbodt上面的评论。这将完成OP在没有正则表达式的情况下所要求的内容,并且在这里发布给任何试图解决类似问题的人,并且可以使用不同类型的解决方案。

function everyAHasMatchingB(str) {
    return Array.from(str)
                .filter(c => c === 'A' || c === 'B')
                .reduce((count, aOrB) => {
                    return aOrB === 'A' ? count + 1 :
                           count <= 0   ? NaN // Mismatched B.  NaN ensures the function returns false.
                                        : count - 1
                }, 0) === 0;
}