在Javascript中我正在寻找将URI转换为Windows格式的正则表达式,但我不太熟悉URI情况以形成正则表达式。 基本上...
/c/myDocs/file.txt
//myDocs/file.txt
应改为
"C:\myDocs\file.txt"
可能还有其他我不知道的情况。因此需要一些帮助。到目前为止我所有的都是用替换来交换斜线,而不是使用正则表达式的驱动器名称。
function pathME(apath)
{
apath = apath.replace(/\//g, "\\")
return apath;
}
正则表达式向导,请启动引擎!
答案 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\
,因此很明显,简单转换在此处不起作用。