如果路径的数量是任意的,那么您需要两步法:
第一个,从字符串中删除所有“无趣的东西”。
搜索.*?/\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不支持。
我认为main/ch_vobsweb在@@之后很常见,所以试着用string替换它.replace – KoolKabin 2010-08-06 04:27:59
@Daniel:为自己说话;有人已经为他写了。如果它让你感觉更好,那不是一个非常有效或可维护的解决方案。 – 2010-08-06 05:24:10
@Steven您是否指我的解决方案效率不高,无法维护? – 2010-08-06 08:06:21