2010-08-06 140 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不支持。