[英]Regex Find Pattern of 4 Characters
我很困惑如何做到這一點。 我有一個匹配此模式的字符串數組:
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,
您可以通過以下方式從您的模式生成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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.