Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 4个字符的正则表达式查找模式_Javascript_Regex - Fatal编程技术网

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

Javascript 4个字符的正则表达式查找模式,javascript,regex,Javascript,Regex,我不知道该怎么做。 我有一个与此模式匹配的字符串数组: AABC, ABBC, ABCC, AAAB, ABBB 我希望使用正则表达式来判断一个特定的字符串是否与这些模式匹配。字符串本身实际上并不包含A、B或C。这只是为了显示模式的外观。例如: 模式AAAB不应等于BAAA 你能帮忙吗 编辑-例如: ['TTES', 'TEES', 'TESS', 'TTTE', 'TEEE'] 数组[0]应与AABC匹配 数组[1]应与ABBC匹配 数组[2]应与ABCC匹配 数组[3]应与AAAB匹配

我不知道该怎么做。 我有一个与此模式匹配的字符串数组:

AABC,
ABBC,
ABCC,
AAAB,
ABBB
我希望使用正则表达式来判断一个特定的字符串是否与这些模式匹配。字符串本身实际上并不包含A、B或C。这只是为了显示模式的外观。例如: 模式AAAB不应等于BAAA

你能帮忙吗

编辑-例如:

['TTES', 'TEES', 'TESS', 'TTTE', 'TEEE']
数组[0]应与AABC匹配

数组[1]应与ABBC匹配

数组[2]应与ABCC匹配

数组[3]应与AAAB匹配


数组[4]应该匹配ABBB,

您可以通过以下方式从模式生成
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);
};
更新

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']

为什么不直接执行
arrayOfStrings.includes(testString)
?我不知道这是怎么回事。。。除非我把每一个可能的字符串都打出来……你能给出你的示例
输入
输出
以便更好地理解吗。对不起。我编辑了这个问题,希望它更清楚。@Coccarave-只是想在这里表述一个问题,因为这个问题看起来很复杂。我猜OP想要寻找的是字符串中唯一字符的数量,以及这些唯一字符是如何定位的。然后用比较器字符串测试它,看看是否有这样的模式。谢谢!虽然我不知道这是怎么回事,但它确实起作用了。你能解释一下吗?另外,有没有可能以AABC形式返回TTES的模式,而不是使用test方法返回true/false?我已经更新了答案,使其更加清晰。我不太明白你的第二个问题。您到底想要什么?例如:如果我运行
stringToPattern('TTES')
,那么它应该返回
'AABC'
。现在它返回true或false,但我想返回实际字符串(A/B/C中的模式),这样我就不必运行.test方法4次来查看哪个返回true。哦,这太神奇了。非常感谢你。
getMatchingPatterns('ttob'); // ['AABC']
getMatchingPatterns('ottb'); // ['ABBC']