仅提取搜索字符串的第一个匹配项,并忽略/

时间:2019-06-03 04:27:05

标签: regex

我是regex的新手,想显示所有包含字符串名称但忽略“ /”后的字符或内部目录的文件夹

仅使用正则表达式

(*spark?/)

下面是目录集:

  

/ app-logs / spark / logs / application_15262_85484

     

/ user / oozie / share / lib / lib_36456456 / spark

     

/ app-logs / spark / logs

     

/ app-logs / spark

     

/ apps / spark / warehouse

我的结果应该是:

  

/ app-logs / spark

     

/ user / oozie / share / lib / lib_36456456 / spark

     

/ app-logs / spark

     

/ apps / spark

2 个答案:

答案 0 :(得分:1)

我们可能在这里寻找的表达式是:

(spark)\/?.*

,我们将其替换为第一个捕获组$1

Demo

测试

const regex = /(spark)\/?.*/gm;
const str = `/app-logs/spark/logs/application_15262_85484
/user/oozie/share/lib/lib_36456456/spark
/app-logs/spark/logs
/app-logs/spark
/apps/spark/warehouse`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

答案 1 :(得分:0)

您的模式(*spark?/)无效,因为在量词*之前,捕获组的开头括号是无效的。 k后面的问号表示字符k是可选的。

您可以使用重复模式来匹配正斜杠,然后不匹配正斜杠,然后匹配/spark

^(?:/[^/\n]+)+/spark

说明

  • ^断言字符串的开头
  • (?:非捕获组
    • /[^/\n]+匹配/,然后匹配1次以上,而不是/或换行符
  • )+关闭非捕获组并重复1次以上
  • /spark匹配/spark

Regex demo