2017-06-24 14 views
0

単語のパターンをある程度の誤差マージンで一致させることは可能ですか? たとえば、「Tike」、「Make」、「Bake」、「Tame」という単語は、「Take」という単語のパターンに1つのスペルの間違いがある場合に適しています。一部の単語に一致する正規表現

+0

正規表現を使用する場合は、欲しい、したくない、または気にしないでください。 –

答えて

1

正規表現は、この問題に非常にスケーラブルなソリューションではありませんが、これは本当にあなたがしたいすべてのであれば、その後、複数の選択肢(|で区切る)で正規表現を使用し、1つの文字で各ドット(.)に置き換えワイルドカード。

function makeMatcher(str) { 
 
    const regexp = [...str].map((chr, i) => 
 
    `${str.slice(0, i)}.${str.slice(i+1)}`).join('|'); 
 
    console.log("regexp is", regexp); 
 
    return new RegExp(regexp, "i"); 
 
} 
 

 
function test(s) { console.log(s, matcher.test(s) ? "matches" : "does not match"); } 
 

 
const matcher = makeMatcher("Mike"); 
 

 
["Mike", "Mila", "Mika", "John"].forEach(test);

あなたの問題は、あなたが一つ以上の代替品(お使いの場合)の存在下で一致している時に「ファジー(または近似)文字列マッチング」と呼ばれる一般的な問題のサブセットであり、 、挿入または削除された文字、または転置された文字。この一般的な問題は確かに正規表現では解決できないでしょう。しかし、これを行うライブラリがたくさんあります。あなたはhttps://code.google.com/archive/p/google-diff-match-patch/を見て始めましょう。