2

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

4 に答える 4

4

これにより、上記の 2 つのケースがカバーされます。

mystring.replace(/^\/([^\/]?)\//, function(match, drive) {
    return (drive || 'c').toUpperCase() + ':\\';
}).replace(/\//g, '\\');
于 2013-02-26T12:36:22.523 に答える
2

この正規表現はあなたの質問を解決するはずですが、最適化することができます長さ1のすべてのドライブ名を処理します:

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

例 2

"//myDocs/file.txt".replace(/\//g,"\\").replace(/^(\\)(?=[^\\])/, "").replace(/^(\w)(\\)/g, "$1:\\")
 // Result is "\\myDocs\file.txt"
于 2013-02-26T12:48:03.997 に答える
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;
}
于 2013-02-26T13:24:17.863 に答える
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\になるため、明らかに単純な変換はここでは機能しません。

于 2013-02-26T12:41:11.570 に答える