匹配没有__magic__文件夹的路径

时间:2016-01-25 17:21:34

标签: javascript regex reactjs webpack

我有一个组件树,在该树的内部是__magic_names__个文件夹(例如__tests____fixtures__等)。我想过滤掉这些__magic_names__文件夹中的所有文件。我正在使用webpack并使用require.context来填充我的组件 - 我不希望我的测试附带我的生产代码。

我有以下正则表达式,假定过滤掉包含双下划线的每个文件路径。不幸的是,它也会将路径与__magic__文件夹进行匹配:

^./((?!=__)[^/]+?(?!=__)/)*((?!=__)[^/]+?(?!=__)).jsx?$

应该有效:

./SomeComponent.js
./SomeComponent.jsx
./SomeComponent/SomeComponent.js
./SomeComponent/SomeComponent.jsx
./SomeComponent/ChildComponent/Child.js
./SomeComponent/ChildComponent/Child.jsx

应该失败

./__magic__/SomeComponent.js
./__magic__/SomeComponent.jsx
./SomeComponent/__magic__/SomeComponent.js
./SomeComponent/__magic__/SomeComponent.jsx
./SomeComponent/__magic__/ChildComponent/Child.js
./SomeComponent/__magic__/ChildComponent/Child.jsx
./SomeComponent/ChildComponent/__magic__/Child.js
./SomeComponent/ChildComponent/__magic__/Child.jsx

Debuggex以这种方式将其可视化:

Regular expression visualization

这里有Debuggex Demo的链接,供那些想要更详细地讨论它的人使用。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你可以匹配那些没有双下划线的东西。

/^((?!__).)*$/gm

答案 1 :(得分:0)

事实证明,问题只是因为我使用错误的语法进行负面预测。 (?!=__)错了,(?!__)是对的。

更正后的正则表达式:

^./((?!__)[^/]+?(?!__)/)*((?!__)[^/]+?(?!__)).jsx?$