代码之家  ›  专栏  ›  技术社区  ›  CarpeDiemKopi

如何在字符串中搜索“:/”的第一个匹配项,然后搜索找到的子字符串的所有其他匹配项,包括“:/”?

  •  -1
  • CarpeDiemKopi  · 技术社区  · 5 年前

    一点解释:

    我有一个字符串(来自命令行程序执行) kpsewhich -all etex.src ):

    c:/texlive/2019/texmf-dist/tex/luatex/hyph-utf8/etex.srcc:/texlive/2019/texmf-dist/tex/plain/etex/etex.src
    

    此字符串由两个或多个串联的文件路径组成,这些路径将再次分开。

    动态搜索模式: c:/

    这里的文件总是在同一个卷上 c ,但必须确定卷名。

    可以用RegExp做这样的事情吗?

    我可以根据实际文件名拆分字符串 etex.src ,但另一种方法可能吗?

    更新:

    RegExp如下所示

    (.+?:[\/\\]+)(?:(?!\1).)* 
    

    更符合我的要求。 How to disassemble a string with CaptureGroup?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Emma    5 年前

    我猜这个表达式可能有点接近你想要设计的:

    c:\/.*?(?=c:\/|$)
    

    DEMO

        2
  •  1
  •   GProst    5 年前

    我不完全确定您想要这个RegExp检索什么,但是如果您想要获取文件路径数组,那么可以使用 /(?<!^)[^:]+/g 正则表达式:

    // in node.js
    const str = 'c:/texlive/2019/texmf-dist/tex/luatex/hyph-utf8/etex.srcc:/texlive/2019/texmf-dist/tex/plain/etex/etex.src'
    const paths = str.match(/(?<!^)[^:]+/g)
    // [
    //   "/texlive/2019/texmf-dist/tex/luatex/hyph-utf8/etex.srcc",
    //   "/texlive/2019/texmf-dist/tex/plain/etex/etex.src"
    // ]
    

    这个RegExp搜索一系列不包含 : 而不是从字符串的开头开始(这不包括 c 卷或任何其他卷名)