【问题标题】:Regex to remove file path正则表达式删除文件路径
【发布时间】:2018-07-04 09:46:12
【问题描述】:

我想删除这个文件路径的一部分:

C:\Users\room\Desktop\dev\myapp\node/数据//test/nested/74201820018PM-AI2.jpg

我想要像 /test/nested/74201820018PM-AI2.jpg 这样的“数据”之后的路径名

编辑:此文件路径来自 windows 操作系统。我希望正则表达式适用于 windows 或 linux。

【问题讨论】:

标签: javascript regex string match filepath


【解决方案1】:

您只需将 a regex 与匹配组一起使用,如下所示:

/\/data\/(.+)$/

说明:

  • \/ 匹配字符 / 字面意思(区分大小写)
  • data 按字面意思匹配字符数据(区分大小写)
  • \/ 匹配字符 / 字面意思(区分大小写)

第一捕获组 (.+)

  • .+ 匹配任何字符(行终止符除外) - 量词 - + 匹配一次到无限次,尽可能多次,根据需要返回(贪心)

    李>
  • $ 在字符串末尾或行前断言位置 字符串末尾的终止符(如果有)

注意:

要使其与WindowsLinux 路径兼容,您需要更新the regex,以便同时考虑/\

[\/\\]data[\/\\](.+)$

演示:

var str = "C:\Users\room\Desktop\dev\myapp\node/data//test/nested/74201820018PM-AI2.jpg";
var match = str.match(/\/data\/(.+)$/);
console.log(match[1]);

编辑:

删除此文件的第一部分path

您可以使用 an inversed regex 匹配path 的第一部分并将其从string 中删除,使用.replace(regex, '')

^(.+[\/\\]data[\/\\])

演示:

var str = `C:\\Users\\room\\Desktop\\dev\\myapp\\node/data//test/nested/74201820018PM-AI2.jpg`;

const regex = /^(.+[\/\\]data[\/\\])/;

var matched = str.replace(regex, '');
console.log(matched);

【讨论】:

  • 为什么需要从数组中获取结果只是为了替换一些东西?它是内存高效的方式吗?
  • @Jaz 这就是正则表达式的匹配方式,数组表示匹配,它不会对内存产生影响,因为您可以省略数组声明部分并直接使用str.match(/\/data\/(.+)$/)[1]。跨度>
  • @Jaz 请注意,您还可以在路径上使用 replace(regex, '') 方法,使用与路径第一部分匹配的反转正则表达式。
  • [\/\]data[\/\](.+)$ 这个在 windows 和 linux 上都不起作用。我如何将它与替换一起使用?
  • @Jaz 我对答案进行了编辑,因此它使用.replace() 检查它,确保转义字符串中的/
【解决方案2】:

试试这个。它检查其余字符是否前面有字符串data/

var str = "C:\Users\room\Desktop\dev\myapp\node/data//test/nested/74201820018PM-AI2.jpg"; 
console.log(str.match(/(?<=data\/).+$/)[0]);

【讨论】:

  • 我不想检查文件扩展名。文件名或扩展名可以是任何东西
【解决方案3】:

恐怕:

  • 路径中的data 有时可能会更改为其他字符串,
  • 实际的“切点”是双斜线(不太可能改变)。

所以你的代码应该:

  • 匹配字符串的起始部分,直到双斜杠(包括),
  • 替换为单个斜线。

类似:result = my_path.replace(/.*\/\//,"/");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2019-07-03
    • 2014-08-03
    相关资源
    最近更新 更多