我想用 gulp 任务替换文件路径。为此,我需要编写一个正则表达式:
我有一个文件夹结构../assets/js/components/main/main.component.html
,我需要替换整个路径,../assets/js/components/**/
,带有一个空字符串。因此,在我的示例中应用正则表达式后,我应该只获取 html 文件,例如:main.component.html
正则表达式应该只匹配路径 ../assets/js/components/
只有一级子文件夹,例如:../assets/js/components/**/
。仅包含 ../assets/js/components/
的路径不应匹配,包含多个子文件夹的路径也不应匹配 ../assets/js/components/main/shouldnotmatch/
我已经写了一个正则表达式:
^..\/assets\/js\/components\/(?:\[^\/\]+\/?)*$
这里的问题是,它会选择所有内容。知道如何解决这个问题吗?
编辑:
更多例子:
../assets/js/components/main/=> ../assets/js/components/main/
../assets/js/components/=> 不应该匹配
../assets/js/components/test/index.html => ../assets/js/components/test/
../assets/js/components/main/shouldnotmatch/shouldnotmatch.html => ../assets/js/components/main/
../assets/js/components/some_components.html => 不应该匹配
../assets/js/components/1.html => 不应该匹配
最佳答案
当在 子文件夹
的位置使用时,您似乎想避免匹配 HMTL/HTM 文件。
您可以使用前瞻来添加该限制并使用
^\.\.\/assets\/js\/components\/(?![^\/]+\.html?$)[^\/]+\/?
参见 regex demo
详情
^
- 字符串的开始\.\.
- 2 个点\/assets\/js\/components\/
- 文字字符串/assets/js/components/
(?![^\/]+\.html?$)
- 在当前位置的左边,不能有:[^\/]+
- 除了/
之外的 1 个或多个字符
\.html?
-.html
或htm
$
- 在字符串的末尾
[^\/]+
- 除了/
之外的 1 个或多个字符
\/?
- 1 或 0 个/
关于用于覆盖文件路径的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46075291/