如果路徑的數量是任意的,那麼您需要兩步法:
第一個,從字符串中刪除所有「無趣的東西」。
搜索.*?/\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