2016-07-07 22 views
1

私はこれを行う方法が混乱しています。私は特定の文字列は、これらのパターンのいずれかに一致するかどうかを把握するために正規表現を使用することを願っています正規表現は4文字のパターンを検索します

AABC, 
ABBC, 
ABCC, 
AAAB, 
ABBB 

: 私は、このパターンに一致する文字列の配列を持っています。文字列そのものは実際にはA、B、またはCではありません。これはパターンがどのように見えるかを示すためのものです。例: パターンAAABはBAAAと同じであってはなりません。

お手伝いできますか?

編集 - 例えば:

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

配列[0] AABCと一致している必要があり、

配列[1]

配列[2] ABCC、

と一致する必要があり、ABBCと一致する必要があります

配列[3]は、AAABと一致する必要があります。

配列[4]は、ABBB、

+0

あなただけの 'arrayOfStrings.includes(たTestString)'行わないのはなぜ? – gcampbell

+0

どうすればうまくいくのかわかりません...可能なすべての文字列を入力しない限り... – cocacrave

+1

サンプルを 'input'と' outputs'に与えて理解を深めることができます。 – Venky

答えて

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); 
}; 

関数は、入力文字列に基づいて、正規表現を生成:/(.)(.)(\2)(.)//(.)(\1)(.)(.)/

  • ABBC

    • AABC
    • など...

    例:

    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'] 
    
  • +0

    ありがとう!私はこれがどのように動作するのか手がかりがありませんが、それは動作します。少し説明できますか?また、テストメソッドを使用してtrue/falseを返す代わりに、TTESのAABCフォームでパターンを返すことは可能ですか? – cocacrave

    +1

    私はもう少し明確に答えを更新しました。私はあなたの2番目の質問を本当に理解していません。あなたは何をしたいですか? – Adam

    +0

    例えば、 'stringToPattern( 'TTES')'を実行すると 'AABC 'が返されます。現在はtrueまたはfalseを返しますが、実際の文字列(A/B/Cのパターン)を返すので、.testメソッドを4回実行して、どちらがtrueを返すかを確認する必要はありません。 – cocacrave

    関連する問題