2011-09-21 38 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, "/");