2

YUI3ライブラリを使用しており、URLの一部を照合および置換するためにフィルターを使用しています。

フィルタはあまり柔軟ではないため、検索用の正規表現と、一致を置き換えるための文字列しか提供できません。

filter: {
    searchExp : "-min\\.js",
    replaceStr: "-debug.js"
}

私の場合、次のようなURLがあります。

http://site.com/assets/js?yui-3.9.0/widget-base/assets/skins/sam/widget-base.css&yui-3.9.0/cssbutton/cssbutton-min.css

ファイル/assets/jsがあればマッチングしたいのですが。.cssパラメータにCSSファイルが含まれている場合、常にCSSファイルのみが含まれます。

.cssこれまでのところ、最後に存在するかどうかを確認するために、小さな正規表現を作成しました。

.*\.css$

ただ、今、試合があったら、/assets/js試合として戻りたいと思います。これは正規表現で実行できるものですか?

個人的には、単純な関数と単純なif / elseを使用してこれを実行したいのですが、制限(正規表現しか使用できない)のため、これに対する正規表現の解決策を見つける必要があります。

4

1 に答える 1

0

これは少し一緒にハッキングされていますが、仕事をする必要があります:

var t = new RegExp( "/assets/js(([^\\.]*\\.)*[^\\.]*\\.css)$" )

document.write( "http://site.com/assets/js?yui-3.9.0/widget-base/assets/skins/sam/widget-base.css&yui-3.9.0/cssbutton/cssbutton-min.css".replace( t, "/newthing/$1" ) );

/assets/js基本的に、、、任意の文字、続いて。を検索し.cssます。全体が一致する場合は、新しいテキストに置き換え、その後に(最初の括弧からの)一致したパターンを含めます。以前のすべて/assetsが試合に含まれているわけではないので、含める必要はありません。

あなたのライブラリはreplace内部で使用していると思いますので、それらの文字列は機能するはずです。具体的には、

"/assets/js(([^\\.]*\\.)*[^\\.]*\\.css)$"
"/newthing/$1"

結果をどうするかはよくわかりませんが、これにより、フォルダーを変更してサフィックスを追加できます(また、最初に両方のトークンの存在を確認できます)。接尾辞を追加するには、置換を次のように変更します。

"/assets/js$1-mysuffix"
于 2013-03-23T04:38:16.163 に答える