正则表达式从字符串中提取路径/文件名

时间:2010-08-08 07:33:39

标签: javascript regex

给定一个输入字符串,我想以指定的格式得到它的输出:filename;path

输入字符串:

/vob/TEST/.@@/main/ch_vobsweb/1/VOBSWeb/main/ch_vobsweb/4/VobsWebUI/main/ch_vobsweb/2/VaultWeb/main/ch_vobsweb/2/func.js

我期待这个输出字符串:

func.js;VOBSWeb/VosWebUI/VaultWeb/func.js

文件名列在整个字符串的末尾,其路径应该使用每个数字值后的字符(例如/1/VOBSWeb/然后/4/VobsWebUI然后{{1 }})

  

相关:
  这与之前的C#问题有关,但这次使用的是JavaScript:String manipulation

2 个答案:

答案 0 :(得分:1)

因为我几乎完成了输入,所以这是精简版:

result = subject.replace(/\/?(?:[^\/\d]+\/)+\d+\/([^\/]+\/?)/g, "$1")
                .replace(/^.*\/([^\/]+)$/, "$1;$0");

答案 1 :(得分:0)

没关系,这已经在蒂姆的早期帖子中得到了回答

首先,从字符串中删除所有“无趣的东西”。

搜索.*?/\d+/([^/]+/?)并将所有内容替换为$1

在C#中:resultString = Regex.Replace(subjectString, @".*?/\d+/([^/]+/?)", "$1");

在JavaScript中:result = subject.replace(/.*?\/\d+\/([^\/]+\/?)/g, "$1");

这会将您的字符串转换为

  

VOBSWeb / VobsWebUI / VaultWeb / func.js


其次,将文件名复制到字符串的前面。

搜索(.*/)([^/]+)$并替换为$2;$1$2

C#:resultString = Regex.Replace(subjectString, "(.*/)([^/]+)$", "$2;$1$2");

JavaScript:result = subject.replace(/(.*\/)([^\/]+)$/g, "$2;$1$2");

这会将上一个操作的结果转换为

  

func.js; VOBSWeb / VobsWebUI / VaultWeb / func.js