web-dev-qa-db-ja.com

単一の円記号「\」を二重の円記号「\\」に置き換えます

ファイルパスの文字列があります。すべての単一のバックスラッシュ( "\")を二重のバックスラッシュ( "\\")に置き換えたい。

   var replaceableString = "c:\asd\flkj\klsd\ffjkl";
   var part = /@"\\"/g;
   var filePath = replaceableString .replace(part, /@"\\"/);
   console.log(filePath);

コンソールはそれを見せてくれました。

   c:asdlkjklsdfjkl

このようなものを見つけましたが、残念ながら機能しませんでした。 \\を\\に置き換える

20
PilgrimViis
var replaceableString = "c:\asd\flkj\klsd\ffjkl";
alert(replaceableString);

これはあなたに警告しますc:asdlkjklsdfjklこれは、 '\'が考慮されないエスケープ文字であるためです。

文字列にバックスラッシュを含めるには、次のようにする必要があります。

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";
alert(replaceableString);

これはあなたに警告しますc:\asd\flkj\klsd\ffjkl

JSフィドル

エスケープシーケンスについてはこちらをご覧ください

デフォルトで文字列に '\'が必要な場合は、エスケープする必要があります。 escape() functionを使用します。

var replaceableString = escape("c:\asd\flkj\klsd\ffjkl");
alert(replaceableString);

JSフィドル

10
Prasath K

試してください:

   var parts = replaceableString.split('\\');
   var output = parts.join('\\\\');

個人的に、私は正規表現の専門家ではないので、読みやすさと奇妙な間違いを避けるために、英数字以外の文字を扱うときはそれらを避ける傾向があります。

8
LittleSweetSeas

コードにいくつかの問題があります。

  1. 文字列変数で\を取得するには、エスケープする必要があります。

    このような文字列を作成する場合:replaceableString = "c:\asd\flkj\klsd\ffjkl";の前に\が付いた文字は、エスケープシーケンスとして扱われます。したがって、文字列の作成中に、エスケープシーケンス\aの解釈が試行されます。これは有効ではないため、aを文字列に格納します。例えば。 \nは改行として解釈されます。

  2. @は.netの例から来ていると思います。 Javascriptは「生の」文字列を認識しません。

  3. 正規表現から引用符を削除します。

これはあなたが望むことをするでしょう:

var string = "c:\\asd\\flkj\\klsd\\ffjkl";
var regex = /\\/g;
var FilePath = string.replace(regex, "\\\\");
7
stema

\はエスケープ文字です。したがって、replaceableStringにはバックスラッシュは含まれません。

これを修正するには、次のような文字列を宣言する必要があります。

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";
4
Leon Lucardie

答えは次のとおりです。

シングルバックスラッシュシングルフォワードスラッシュに置き換える場合:

var stringReplaced = String.raw`c:\asd\flkj\klsd\ffjkl`.split('\\').join('/')
console.log(stringReplaced);

ダブルバックスラッシュシングルスラッシュに置き換える場合:

var stringReplaced = String.raw`c:\\asd\\flkj\\klsd\\ffjkl`.split('\\\\').join('/')
console.log(stringReplaced);

最初に文字列をエンコードします

次に、出現するすべての%5Cを%5C%5Cに置き換えます

最後に文字列をデコードします

var result = encodeURI(input);
result=decodeURI(result.replace(/%5C/g,"%5C%5C"));
1
omkar1707

文字列に単一のバックスラッシュが含まれる場合、javascript replaceメソッドでは単一のバックスラッシュを置換できませんでした。

代わりに、分割された文字列の配列を返すsplitメソッドを使用して、バックスラッシュなしで文字列を連結する必要がありました(または置き換えたいものは何でも)

解決策(バックスラッシュをアンダースコアに変更):

var splitText = stringWithBackslash.split('\\');
var updatedText = splitText[0] + '_' + splitText[1];
0
Geoff

文字列一致の場合、encodeURIComponent、decodeURIComponentを使用することをお勧めします。

match(encodeURIComponent(inputString));

function match(input)
{

for(i=0; i<arr.length; i++)
{
if(arr[i] == decodeURIComponent(input))
return true;
else return false;
}
}

バックスラッシュを検索しようとしている文字列の内容を制御できず、SINGLE _\_値が含まれている場合(たとえば、変数myPathに_C:\Some\Folder\file.jpg_が含まれている場合)、実際に単一のバックスラッシュを参照できますJavaScriptではString.fromCharCode(92)として。

上記のファイルパスの例でファイル名を取得します。

_var justTheName = myPath.split(String.fromCharCode(92)).pop();
_
0
thegajman