0

たとえば、my_very_nice_file.js と一致させたいのですが、次の文字 (mrie) と一致させたいと考えています。

m: my
r: very
i: nice
e: file

ご覧のとおり、これらの文字の後には別の文字が続きますが、一緒にする必要はありません。

Sublime Text 2 がファイル名に一致するように。任意の文字を配置できますが、一方が他方に従う必要があります。

例:

ここに画像の説明を入力してください

私はJavaScriptでそれをしなければなりません。どうすればいいですか?

誰かが興味を持っている場合は、これが私の質問 GitHub の結果です

4

2 に答える 2

3

単純なパターンは次のようになりますm.*r.*i.*e.*。ただし、拡張子が .js のファイルだけを照合する必要はなく、パターン マッチングは拡張子ではなくファイル名のみを照合する必要があると想定しています。この場合、拡張機能にこれらの文字が含まれていると、簡略化されたパターンが問題を引き起こします。

考察の材料: 次のパターンはどうでしょうか?

m[a-z0-9\-_]*?r[a-z0-9\-_]*?i[a-z0-9\-_]*?e[a-z0-9\-_]*?\.[a-z]+

パターンの機能の簡単な説明:

  • m、r、i、e が正しい順序になるようにします
  • それぞれの間に 0 個以上の文字 (英数字とアンダースコア) を入れることができます。の用法 '?' 遅延選択を示します。エンジンは次に進む前に、最小数の文字に一致させようとします。

ただし、このパターンでは、英数字とアンダースコア文字のみを受け入れることも前提としています。他の文字を含めたい場合は、角括弧の間にさらに記号を追加できます (ただし、重要なものは忘れずにエスケープしてください)。

JS でマッチングを行うには、以下を使用できます。

var patt = /m[a-z0-9\-_]*?r[a-z0-9\-_]*?i[a-z0-9\-_]*?e[a-z0-9\-_]*?\.[a-z]+/gi;
if(fileName.match(patt)) {
    // If there is a match
} else {
    // If there is no match
}

[編集] OPは、強調表示された文字を太字にすることができるかどうかを尋ねました. 関数の使用を提案しました.replace()

var patt = /m([a-z0-9\-_]*?)r([a-z0-9\-_]*?)i([a-z0-9\-_]*?)e([a-z0-9\-_]*\.[a-z]+)/gi;
var newFileName = fileName.replace(patt, "<strong>m</strong>$1<strong>r</strong>$2<strong>i</strong>$3<strong>e</strong>$4");

完全を期すために、ここに概念実証のフィドルがあります;)

于 2013-09-11T19:41:33.893 に答える