2011-09-21 39 views
0

在Javascript中,我有,看起來像一個路徑的字符串:重寫的Javascript路徑字符串

/xxx:Level1/yyy:Level2/xxx:Level3/ccc:Level4 

前綴可能會或可能不會對每個級別在那裏。我需要創建一個消除每個文件夾級別的前綴的新字符串,例如:

/Level1/Level2/Level3/Level4 

好的。我做了類似以下的事情,但我想也許用正則表達式可以使它更緊湊。我怎麼能這樣做?

var aa = "/xxx:Level1/yyy:Level2/xxx:Level3/ccc:Level4" 

var bb = aa.split("/").filter(String); 
var reconstructed = ""; 

for(var index in bb) 
{ 
var dirNames = bb[index].split(":"); 
if(dirNames.length==1) reconstructed += "/" + dirNames[0]; 
else if(dirNames.length==2) reconstructed += "/" + dirNames[1]; 
} 
+0

哇!你們非常快。 –

回答

2

像這樣:

var bb = aa.replace(/\/[a-z]+:/g, '/'); 

更改[a-z]包括可能出現的前綴,或者只使用[^\/:]任何字符。

1
aa = aa.replace(/\/[^:\/]\:/g, "/"); 

此功能將通過"/"使用RE,其中xxx:是一個前綴代替"/xxx:"每一次出現。

4

您可以使用正則表達式是這樣的:

var str = "/xxx:Level1/yyy:Level2/xxx:Level3/ccc:Level4"; 
var out = str.replace(/\/[^:\/]+:/g, "/"); 
alert(out); 

這符合:

/ 
followed by one or more characters that is not a : or a/
followed by a : 
and replaces all that with a/effectively eliminating the xxx: 

演示在這裏:http://jsfiddle.net/jfriend00/hbUkz/

2
var a = "/xxx:Level1/yyy:Level2/xxx:Level3/ccc:Level4"; 
var b = a.replace(/\/[^\/]*:/g, "/");