Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于覆盖文件路径的JavaScript正则表达式_Javascript_Regex_Gulp - Fatal编程技术网

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

用于覆盖文件路径的JavaScript正则表达式,javascript,regex,gulp,Javascript,Regex,Gulp,我想用gulp任务替换文件路径。为此,我需要编写一个正则表达式: 我有一个文件夹结构。/assets/js/components/main/main.component.html,我需要用一个空字符串替换整个路径。/assets/js/components/**/。因此,在我的示例中应用正则表达式之后,我应该只得到html文件,例如:main.component.html 正则表达式应仅将路径。/assets/js/components/与一级子文件夹匹配,例如:。/assets/js/comp

我想用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/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?$)[^\/]+\/?

详细信息

  • ^
    -字符串的开头
  • \.\.
    -2点
  • \/assets\/js\/components\/
    -一个文本字符串
    /assets/js/components/
  • (?![^\/]+\.html?$)
    -在当前位置的左侧,不能有:
    • [^\/]+
      -1个或多个字符,而不是
      /
    • \.html?
      -
      .html
      htm
    • $
      -在字符串末尾
  • [^\/]+
    -1个或多个字符,而不是
    /
  • \/?
    -1或0
    /
    s

首先,您必须转义
注意,您可以使用
^\.\.\/assets\/js\/components\/([^\/]+\/?)$
并确保在代码中引用组1值。请注意,在演示中,必须将
\n
放入
[^\/]
中,以避免跨行匹配。请参见@WiktorStribiżew,但它只选择第一个。它应该在任何地方选择
。/assets/js/components/***/
。@Gabriel很抱歉,它应该匹配
shouldnotmatch.html
?现在,它变得相当不清楚了。@DNKROZ你刚才犯了两个错误:)加布里埃尔,检查。甚至可能