2010-08-06 138 views
3

给定一个输入字符串,我想从指定的格式得到这个输出:filename;path字符串操作

对于输入字符串/vob/TEST/[email protected]@/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

+1

我认为main/ch_vobsweb在@@之后很常见,所以试着用string替换它.replace – KoolKabin 2010-08-06 04:27:59

+0

@Daniel:为自己说话;有人已经为他写了。如果它让你感觉更好,那不是一个非常有效或可维护的解决方案。 – 2010-08-06 05:24:10

+0

@Steven您是否指我的解决方案效率不高,无法维护? – 2010-08-06 08:06:21

回答

0

JavaScript对返回数组的字符串有一个split()函数,所以我认为这可能是一个很好的起点为了你的目的。

+0

仅供参考:此问题在合并之前过去有一个javascript标记,而不是C#标记。 – 2010-08-07 15:14:13

+0

如果可能,希望在Javascript中有相同的排序方式 – Raj 2010-08-08 06:03:09

0

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

找到这个:

.*[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.]*)/ 

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

​​
1

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


第一个,从字符串中删除所有“无趣的东西”。

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

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");

如果字符串匹配失败此正则表达式将是低效的;这可以通过原子分组来改善,但JavaScript不支持。