字符串操作

给定一个输入字符串,我想以指定的格式从中获取输出: 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然后/2/vaultWeb/2/vaultWeb

如果路径数是任意的,那么您需要两步法:


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

搜索.*?/\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


如果路径数量不变,那么您可以在单个正则表达式中执行此操作:

搜索^.*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+)

并以$4;$1$2$3$4替换$4;$1$2$3$4

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

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

如果字符串不匹配,这个正则表达式将是低效的; 这可以通过primefaces分组来改进,但JavaScript不支持这一点。

Javascript在返回数组的字符串上有一个split()函数,所以我认为这可能是你想要的一个很好的起点。

假设它不是任意数量的路径,您可以使用正则表达式:

找到这个:

 .*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z.]*)/ 

然后使用分组写入新字符串:

 \4;\1/\2/\3/\4