2017-02-11 8 views
4

私はローダーにファイルをフィードする正規表現を取るwebpackを使用しています。私はビルドからテストファイルを除外したい、テストファイルは.test.jsで終わる。だから、index.test.jsではなく、index.jsと一致する正規表現を探しています。「.js」ではなく「.test.js」で終わるファイルに一致する正規表現を取得するにはどうすればよいですか?

私は

/(?<!\.test)\.js$/ 

と負のルックバックアサーションを使用しようとしましたが、それは表現が無効であることを述べています。

SyntaxError: Invalid regular expression: /(?<!\.test)\.js$/: Invalid group 

の例では、名前のファイル:

index.js   // <-- should match 
index.test.js  // <-- should not match 
component.js  // <-- should match 
component.test.js // <-- should not match 
+0

は長い時間でのWebPACKを見ていないが、私はあなたが正規表現を省略し、代わりに関数を渡すことができることを覚えているようです。あなたの場合、このようなものがあります: 'function(path){return path.endsWith( '.js')&&!path.endsWith( 'test.js')'これを他のバンドラーと混在させることもできます。 –

答えて

1

var re=/^(?!.*test\.js).*\.js$/; 
 
console.log(re.test("index.test.js")); 
 
console.log(re.test("test.js")); 
 
console.log(re.test("someother.js")); 
 
console.log(re.test("testt.js"));

2

Javascriptが負lookbehindsをサポートしていませんが、前後参照:あり

^((?!\.test\.).)*\.js$ 

DEMO

4

あなたが行く:

^(?!.*\.test\.js$).*\.js$ 

working on regex101.comを参照してください。


他で述べたように、JavaScriptで使用される正規表現エンジンはすべての機能をサポートしていません。たとえば、負のlookbehindはサポートされていません。

+2

あなたの答えをもう一度混乱させるのは悪いですが、これは実際には最高の正規表現です(つまり、中間文字列test.jsをキャッチしないように先読みの行末位置を持つ唯一の正規表現です) –

関連する問題