将URI转换为Windows路径格式

时间:2013-02-26 12:29:01

标签: javascript uri

在Javascript中我正在寻找将URI转换为Windows格式的正则表达式,但我不太熟悉URI情况以形成正则表达式。 基本上...

  • /c/myDocs/file.txt
  • //myDocs/file.txt

应改为

"C:\myDocs\file.txt"

可能还有其他我不知道的情况。因此需要一些帮助。到目前为止我所有的都是用替换来交换斜线,而不是使用正则表达式的驱动器名称。

function pathME(apath)
{
    apath = apath.replace(/\//g, "\\")
    return apath;
}

正则表达式向导,请启动引擎!

4 个答案:

答案 0 :(得分:2)

这将涵盖上述两种情况:

mystring.replace(/^\/([^\/]?)\//, function(match, drive) {
    return (drive || 'c').toUpperCase() + ':\\';
}).replace(/\//g, '\\');

答案 1 :(得分:1)

此正则表达式应解决您的问题,但可以进行优化 处理长度为1的所有驱动器名称:

   "/c/myDocs/file.txt".replace(/\//g,"\\").replace(/^(\\)(?=[^\\])/, "").replace(/^(\w)(\\)/g, "$1:\\")
  // Result is "c:\myDocs\file.txt"

示例二

"//myDocs/file.txt".replace(/\//g,"\\").replace(/^(\\)(?=[^\\])/, "").replace(/^(\w)(\\)/g, "$1:\\")
 // Result is "\\myDocs\file.txt"

答案 2 :(得分:1)

我假设C盘不是你的路径字符串中唯一的驱动器,所以写了一个小的pathME()函数来模仿你的。这应该包括你提到的所有案例。

function pathME(apath) {
    //Replace all front slashes with back slashes
    apath = apath.replace(/\//g, "\\");

    //Check if first two characters are a backslash and a non-backslash character
    if (apath.charAt(0) === "\\" && apath.charAt(1) !== "\\") {
        apath = apath.replace(/\\[a-zA-Z]\\/, apath.charAt(1).toUpperCase() + ":\\");
    }

    //Replace double backslash with C:\
    apath = apath.replace("\\\\", "C:\\");
    return apath;
}

答案 3 :(得分:0)

这里不需要任何正则表达式。你可以用简单的字符串操作来实现:我认为。这样,如果您愿意,可以更好地处理输入字符串中的错误。

var newpath = apath.replace(/\//g, '\\');
var drive = null;
if (newpath.substring(0, 2) == '\\\\') { 
   drive = 'c';
   newpath = newpath.substring(1);
}
else if (newpath.substring(0, 1) == '\\') {
   drive = newpath.substring(1, newpath.indexOf('\\', 2)); 
   newpath = newpath.substring(newpath.indexOf('\\', 2));
}
if (drive != null) { newpath = drive + ':' + newpath; }

并且旁注:我不知道你的问题的范围,但是会出现这种情况不起作用的情况。例如,在Unix中,网络共享将挂载到/any/where/in/the/filesystem,而在Windows中则需要\\remotehost\share\,因此很明显,简单转换在此处不起作用。