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