我很困惑如何做到这一点。 我有一个符合这种模式的字符串数组:
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匹配,
答案 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']