正则表达式查找4个字符的模式

时间:2016-07-07 09:22:45

标签: javascript regex

我很困惑如何做到这一点。 我有一个符合这种模式的字符串数组:

AABC,
ABBC,
ABCC,
AAAB,
ABBB

我希望使用正则表达式来确定特定字符串是否与其中一种模式匹配。字符串本身实际上不包含A,B或C.这只是为了显示模式的外观。例如: 模式AAAB不应该等于BAAA。

你能帮忙吗?

编辑 - 例如:

['TTES', 'TEES', 'TESS', 'TTTE', 'TEEE']

array [0]应匹配AABC,

array [1]应匹配ABBC,

array [2]应匹配ABCC,

array [3]应匹配AAAB,

array [4]应与ABBB匹配,

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式从模式中生成RegExp

var stringToPattern = function (string) {
    var regexString = string.split('').map(function (char, position, string) {

        var prevIndex = string.indexOf(char);

        return prevIndex < position ? '(\\' + (prevIndex + 1) + ')' : '(.)';

    }).join('');

    return new RegExp(regexString);
};

该函数根据输入字符串生成正则表达式:

  • AABC/(.)(\1)(.)(.)/
  • ABBC/(.)(.)(\2)(.)/
  • 等...

示例:

stringToPattern('AABC').test('TTES'); // true
stringToPattern('AABC').test('TEES'); // false

stringToPattern('ABBC').test('TEES'); // true
stringToPattern('ABBC').test('TTES'); // false

<强>更新

var getMatchingPatterns = function (string) {
    var patterns = [
        'AABC',
        'ABBC',
        'ABCC',
        'AAAB',
        'ABBB'
    ];
    return patterns.filter(function (pattern) {
        return stringToPattern(pattern).test(string);
    });
};

的示例:

getMatchingPatterns('ttob'); // ['AABC']
getMatchingPatterns('ottb'); // ['ABBC']