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

时间:2019-07-24 22:37:02

标签: javascript node.js regex windows tex

一些解释:

我有一个类似(从命令行程序执行kpsewhich -all etex.src开始)的字符串:

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

此字符串包含2个或更多串联的文件路径,这些路径将再次分开。

动态搜索模式:c:/

文件始终位于同一卷上,此处为c,但必须确定卷名。

是否可以使用RegExp做类似的事情?

我可以根据实际的文件名etex.src拆分字符串,但是其他方法可行吗?

更新:

RegExp如下

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

更好地满足了我的要求。 How to disassemble a string with CaptureGroup?

2 个答案:

答案 0 :(得分:1)

我猜想这个表达式可能与您要设计的表达式有些接近:

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

DEMO

答案 1 :(得分:1)

我不确定您要此RegExp检索什么,但是如果要获取文件路径数组,则可以使用/(?<!^)[^:]+/g regex:

// 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卷或任何其他卷名称) >