2017-09-06 3 views
1

ファイルパスをgulpタスクに置き換えます。そのために私はRegexを書く必要があります:JavaScriptファイルパスを上書きするための正規表現

私は全体のパス../assets/js/components/**/を空の文字列で置き換える必要がある../assets/js/components/main/main.component.htmlというフォルダ構造を持っています。だから、私の例で正規表現を適用した後、私は、例えば:main.component.html

正規表現は、サブフォルダの一つだけのレベルでのみパス../assets/js/components/と一致する必要があります、例えば:../assets/js/components/**/のみhtmlファイルを取得する必要があります。唯一../assets/js/components/とパスが../assets/js/components/main/shouldnotmatch/

どちらも一致し、複数のサブフォルダを持つパスはならない私はすでに1つの正規表現を書いた:

^..\/assets\/js\/components\/(?:\[^\/\]+\/?)*$

ここでの問題は、それがすべてを選択していること、です。どのようにこれを修正するための任意のアイデア?

EDIT:

より多くの例:

../assets/js/components/main/ => ../assets/js/components/main/ ../assets/js/components/ => should not match ../assets/js/components/test/index.html => ../assets/js/components/test/ ../assets/js/components/main/shouldnotmatch/shouldnotmatch.html => ../assets/js/components/main/ ../assets/js/components/some_components.html => should not match ../assets/js/components/1.html => should not match

+0

まず、あなたは 'あなたが'^\使用することができます.' – Rajesh

+0

注意をエスケープする必要があります\ \。。/assets \/js \/components \ /([^ \ /] + \ /?)$ 'を使用して、コード内のグループ1の値を参照してください。あなたのデモでは、行間のマッチングを避けるために '\ n'を' [^ \ /] 'に入れなければならないことに注意してください。 https:// regex101を参照してください。com/r/PbCnXa/1 –

+0

@WiktorStribiżewが、最初のものだけを選択します。 '../ assets/js/components/** /'をどこでも選択する必要があります。 – Gabriel

答えて

1

あなたがsubfolderの場所で使用する場合HMTL/HTMファイルを一致避けたいようです。文字列の先頭

  • \.\. - - 2ドット

    あなたはその制限を追加し、regex demo

    詳細

    • ^を参照してください

      ^\.\.\/assets\/js\/components\/(?![^\/]+\.html?$)[^\/]+\/? 
      

      を使用するように先読みを使用することができます

    • \/assets\/js\/components\/ - リテラル文字列/assets/js/components/
    • (?![^\/]+\.html?$) - 直ちに現在位置の左側に存在することができない。
      • [^\/]+ - /
      • \.html?以外の1またはそれ以上の文字 - .html又はhtm
      • $ - 文字列の最後に
    • [^\/]+ - /
    • \/?以外の1以上の文字 - 1または0 /
  • 関連する問題