2016-04-10 15 views
1

私はgetContents()という関数を持っています。これは見つかったファイル名の正規表現を受け入れます。Regex on File Names

私は、次の2つの正規表現のパターンで、JavaScriptファイル用のjsフォルダをスキャン:の<head>タグやフッターには、Javascriptファイルがロードされる場所が決定した場合

$js['head'] = "/(\.head\.js\.php)|(\.head\.js)|(\.h.js)/"; 
$js['foot'] = "/(\.foot\.js\.php)|(\.foot\.js)|(\.f.js)|(\.js)^(\.head\.js)/"; 

私はそれによってネーミングシステムを持っていますHTMLページ。すべてのファイルは、(.head.jsなど)を指定しない限り、ページの下部に読み込まれているとみなされます。

私が気づいたのは、js['foot']アレイに.head.jsも含まれていて、ファイルが2回読み込まれることに気付きました。だから私は^(\.head\.js)で追加し、それは働いた!フッタ配列に.headsファイルが追加されなくなりました。私は正規表現で吸うので、私は自分自身に非常に満足していました。しかし今や標準の.jsファイル(通常の.jsファイル)が$js['foot']アレイにロードされているようになったようです。どうしてこれなの? ^(\.head\.js)部分を削除すると、その部分がロードされます。

明確にするためには、私は$js['foot']配列で終わるファイルをロードします:

.foot.js.php 
.foot.js 
.f.js 
.js 

そしてIGNOREすべて:

.head.js.php 
.head.js 
.h.js 

誰かがこれを行うには、上記の私の正規表現を修正することはできますか?私は^オペレータがNOTだと思ったが、間違っていた!

+0

を命名規則。おそらく、代わりに2つのフォルダにあなたのjsファイルを分割することができますし、正規表現にバイバイを言う? –

+0

私はちょうど2つの別々の 'glob'呼び出しを介してこれをやってみたいと思います... /サイドノートで、なぜ' foot'_and_'f'、 'head'_and_'h' - これらは特別な意味を持っていますか別の目的もありますか? – CBroe

+0

@CBroeは、毎回 '.head.js'を書くのではなく、命名のオプションを与えるだけです。' .h.js'は簡単です。 – Chud37

答えて

1

^(\.head\.js)は文字列の中央にあり、^は行開始に一致するアンカーとみなされるため無効です。

あなたが実際にフッター正規表現でhead.jsをマッチング停止する否定後読みアサーション必要があります:私は別のフォルダに代わりに「やっと」文書に頼る私のファイルを分割する傾向がある

$js['head'] = '/\.head\.js(?:\.php)?|\.h.js/'; 
$js['foot'] = '/\.foot\.js(?:\.php)?|(?<!head|h)\.js/'; 

RegEx Demo

+0

この例は '.js'をロードしませんか?上記の例と一致する正規表現を書くことができますか? – Chud37

+0

[このデモでは 'head.js'以外の' .js 'にマッチしています](https://regex101.com/r/wU1zA8/4)どうやって使っていますか? – anubhava

+1

これはうまくいくようです!ありがとうございます - 私は前にregex101に行ったことはありません。私はそこでたくさん学ぶでしょう。ありがとう。 – Chud37