2016-03-23 35 views
1

特定のパターンと一致する文字列の天気をテストする必要があります。 C:\some\path\to\folder\folder.jpg または C:\another\file\path\file.jpgJavascript:パターンに一致する文字列を確認してください

パターンは次のとおりです:拡張子なしのファイル名は、それが配置されている正確な親フォルダ名を、一致している必要があり 文字列は、例えば、完全なファイルパス、です。ファイル名には任意の値を使用できます。

だから、私の例では唯一の最初の文字列がパターンに一致します。

C:

を.jpgのフォルダ\フォルダを\に\一部\パスを\このテストを行うことができます1つの正規表現を使用してJavaScriptで?

+0

あなたの例では、 'folder.jpg'は' .jpg'の拡張子を持っています。拡張子を持たないcondition _file nameは、正確な親フォルダ名とどのように一致する必要がありますか? –

+0

indexOfメソッドを試してみてください。var str = "こんにちは、宇宙にようこそ。"; var n = str.indexOf( "welcome"); http://www.w3schools.com/jsref/jsref_indexofasp –

答えて

4

はい、あなたは、バックを参照することができます。

\\([^\\]+)\\\1\.[^.\\]*$ 

最初のグループ([^\\]+)は、フォルダ名を取り込み、その後、後方参照(\1)は、「ここに同じことを言ってそれに戻って参照します。 "

したがって、上記の中、私たちは持っている:

  • \\は - 別のリテラルのバックスラッシュ
  • \1 - - フォルダ名
  • \\ためのキャプチャグループ - 文字通りのバックスラッシュ
  • ([^\\]+)と一致します「ここと同じもの」と言うキャプチャグループへの逆参照。
  • \. - リテラル.(拡張子を導入する)
  • [^.\\]* - ゼロ以上の拡張文字(あなたは "1つ以上" を意味するように+*を変更したい場合があります)
  • $ - 文字列の最後

On regex101

C:\some\path\to\folder\folder.test.jpgと一致すると見なされた場合(folder.test.jpgの内線番号はではなく、.jpgではないと思われます)、.を削除してください最後に[^.\\]があります。

拡張子のないファイルを許可する場合は、おそらく\\([^\\]+)\\\1(?:\.[^.\\]+)?$です。 (?:\.[^.\\]+)?はオプションです。

+2

私は最後のネゲートされた文字クラスにドットを追加する必要があると思います。 '\ folder \ folder.test.jpg' –

+0

@SebastianProske:そうです、修正しました。私はあなたの定義が "拡張子"(拡張子は.jpgまたは.test.jpg)に依存していると思います。私はあなたの意見に同意します。 –

関連する問題