用于匹配文件夹内容的互补子组的正则表达式(webpack 供应商包)

Regex to match complementary subgroups of a folder's contents (webpack vendor bundles)

我正在尝试找出两个正则表达式,我将使用它们与 Webpack 一起创建两个不同的供应商包。

这是我的 node_modules 文件夹的简化列表:

第一个供应商包应该是 "essentials" 包,比方说,它们是 jquerycore-js

第二个供应商包应包含 node_modules 除了 jquerycore-js 中的所有其他包(这意味着正则表达式必须匹配 jquery-ui).

这是我当前的正则表达式:

问题是第二个正则表达式与 jquery* 库不匹配,可能是因为以 jquery.

开头的否定前瞻

您需要在 jquerycore-js 之后添加对 / 字符的检查,因为您只需要将它们作为整个子文件夹名称失败:

node_modules(?!\/(jquery|core-js)\/)(\/[^\/]+)+\.js
                                 ^^

或者,如果也可以有字符串结尾:

node_modules(?!\/(jquery|core-js)(\/|$))(\/[^\/]+)+\.js

regex demo

请注意,我还建议将 [a-zA-Z0-9-_]+ 替换为更通用的 [^\/]+,匹配 / 以外的任何 1+ 个字符,但如果您的要求更具体,您可以保留您的模式.