【JavaScript】文字列内のスラッシュ(/)をバックスラッシュ(\)に反転・置換する方法
JavaScriptでは、スラッシュ(/)を含む文字列を受け取り、すべてのスラッシュをバックスラッシュ(\)に置き換えた新しい文字列を返す関数が必要になる場面があります。たとえば、Unix系のパス区切り文字をWindows形式に変換したい場合などが典型例です。
この記事では、forループを使った基本的な実装方法と、replace()メソッドを使ったより簡潔な方法の2通りを解説します。
forループを使った基本的な実装
まずは、文字列を1文字ずつ走査しながら新しい文字列を組み立てる、最も基本的なアプローチです。
const str = 'Th/s str/ng /conta/ns some/ forward slas/hes';
const invertSlashes = str => {
let res = '';
for(let i = 0; i < str.length; i++){
if(str[i] !== '/'){
res += str[i];
continue;
};
res += '\\';
};
return res;
};
console.log(invertSlashes(str));
コードのポイント
- 各文字がスラッシュ(
'/')以外であれば、そのまま結果文字列に追加します。 - スラッシュだった場合は、代わりにバックスラッシュ(
'\\')を追加します。JavaScriptの文字列リテラルでは、バックスラッシュ自体がエスケープ文字であるため、'\\'のように2つ重ねて記述する必要があります。
出力結果
コンソールには次のように表示されます。
Th\s str\ng \conta\ns some\ forward slas\hes
元の文字列に含まれていたすべてのフォワードスラッシュ(/)が、バックスラッシュ(\)に置き換えられているのが確認できます。
replace()メソッドを使った簡潔な方法
実務では、正規表現とString.prototype.replace()メソッドを組み合わせることで、同じ処理をわずか1行で実現できます。
const invertSlashes = str => str.replace(/\//g, '\\'); console.log(invertSlashes(str)); // Th\s str\ng \conta\ns some\ forward slas\hes
正規表現の末尾にある g フラグ(グローバル検索)を指定することで、マッチしたすべてのスラッシュが置換対象になります。このフラグを忘れると、最初の1箇所しか置換されないので注意してください。
まとめ
- 文字列内のスラッシュをバックスラッシュに反転するには、ループでの逐次処理か、正規表現による一括置換が使えます。
- シンプルさと可読性を重視するなら
str.replace(/\//g, '\\')の1行がおすすめです。 - バックスラッシュはJavaScriptではエスケープ文字のため、文字列中では
'\\'、正規表現中では\\と記述します。
-
JavaScriptで指定した文字数に文字列を切り詰める方法
JavaScriptでは、長いテキストを一覧表示やプレビュー用に短く表示したい場面がよくあります。この記事では、文字列と数値を受け取り、指定された文字数を超える場合は文字列を切り詰めて末尾に「...」を付けて返す関数の実装方法を解説します。要件作成する関数は、文字列と数値の2つの引数を受け取ります。文字列の長さが指定された数値より大きい場合は、先頭から指定文字数分だけ切り取った文字列に「...」を連結して返します。切り詰める必要がない場合(元の文字列が指定文字数以下の場合)は、元の文字列をそのまま返します。コード例以下がその実装コードです。 { const { length: len
-
JavaScriptで文字列内の指定文字への最短距離を求める方法
問題概要英語の小文字アルファベットのみで構成された文字列 str を第1引数に、その文字列に必ず存在する1文字 char を第2引数にとる JavaScript 関数を作成する必要があります。この関数は、文字列 str 内の各文字について、char で指定された文字の中で最も近いものまでの距離を計算し、その結果を配列として返します。たとえば、次のような入力が与えられた場合を考えてみましょう。入力:const str = somestring; const char = s;出力:const output = [0, 1, 2, 1, 0, 1, 2, 3, 4, 5];出力の配列を見ると、イン