用于覆盖文件路径的 JavaScript 正则表达式

标签 javascript regex gulp

我想用 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? - .htmlhtm
    • $ - 在字符串的末尾
  • [^\/]+ - 除了 /
  • 之外的 1 个或多个字符
  • \/? - 1 或 0 个 /

关于用于覆盖文件路径的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46075291/

相关文章:

c++ - 使用 RE2 正则表达式库从字符串中删除 html 标签

javascript - 将文本添加到特定 DIV

javascript - 使用正则表达式限制字段中的帐户 ID 输入

javascript - 从 Laravel Controller 获取 php 变量到 javascript

c# - 用于在字符串中查找 URL 的正则表达式

javascript - 在javascript函数中使用done作为参数是什么意思?

javascript - React - react.render() 上未处理的错误事件

javascript - Bower 安装给出 "Package not found"

javascript - 如何从 Graphql 解析函数中的回调返回值?

javascript - 在复选框状态下设置 Cookie