正则表达式忽略前6个字符的匹配

时间:2018-04-03 06:01:53

标签: regex

这是我的字符串:/my/name/is/the/following/string/name.lastname/file.txt

我想从此字符串中提取name.lastname

我尝试过使用\/.*\.app,但这会选择:  /my/name/is/the/following/string/name.lastname

如何忽略前6个或7个/

5 个答案:

答案 0 :(得分:3)

你有很多好的答案。这是一个使用正面向前(?=)的字符串$的结尾。

([^\/]+)(?=\/[^\/]+$)

这里的好处是你可以在最后一个文件夹之前拥有尽可能多的文件夹,它仍然可以使用。

DEMO

如果我们打破这个,你有一个

  • 捕获群组:([^\/]+)
  • 积极向前看(?=\/[^\/]+$)

捕获组将匹配所有 ^正斜杠/之外的所有内容,其中一个与+匹配。这实际上会捕获正斜杠之间的每个字符串,这就是我们使用正向前瞻的原因。

您积极前瞻的最大因素是它会查找字符串$的结尾(由美元符号表示)。它将在正斜杠/之后查找所有内容(因此(?=\/部分),然后它将确保不存在其他正斜杠,但匹配所有其他字符[^\/]一次到无限次+ 1}}到字符串$的末尾。

答案 1 :(得分:1)

您可以使用重复模式来消耗但不匹配路径的前六个组件:

(?:\/[^\/]+){6}\/([^\/]+)

您的项目将在第一个捕获组中提供。

Demo

答案 2 :(得分:1)

如果您想要更灵活的解决方案,即之间的字符串 最后2斜杠(不一定是第6和第7),您可以使用:

\/([^\/]+)\/(?!.*\/)

含义:

  • \/ - 斜线。
  • ([^\/]+) - 捕获第1组 - 除斜线之外的一系列字符。 这就是你真正想要匹配的东西。
  • \/ - 另一个斜线。
  • (?! - 负向前瞻:
  • .*\/ - 任何字符和斜线的序列。
  • ) - 否定前瞻结束(即使在JavaScript版本的Regex中也能正常工作)。

上述否定前瞻实际上意味着:无处可去 可以出现任何斜杠

答案 3 :(得分:1)

试试这个,它将匹配6或7位

([a-z\.]*)(?=\/[a-z]*\.txt)

(?=\/[a-z]*\.txt) to check ends with .txt
([a-z\.]*) CapturingGroup to capture the name

Demo

答案 4 :(得分:1)

((\/)[a-b]*).[^\/]{12}

嗨,请尝试上面的Reg ex,它应该返回你期望的