JavaScript、関数処理でreplace。

〽️ 「法則にしたがって」置換する。






syntax。


「「5文字列」」.replace(regexp,「「1(value) => 返り値」」);


一定の規則にしたがってreplace。

こんにちは、「ふ」です。
JavaScriptのreplaceメソッド、フツーの使い方であれば、

let str1 = "かけうどん、天ぷらうどん"; str1 = str1.replace(/うどん/g,"そば"); console.log(str1); 「「3 >> かけそば、天ぷらそば」」

〜とするかと思います。
ここで変換後の文字列を直接記述した場合、replace先の文字列は一意のものとなります。 「うどん」がすべて「そば」になるだけです。

もっと用途を広げたい。

単純に文字列を1つの具体的な別の文字列に変換するのではなく、関数を使うことで「ある法則」にしたがった変換を行いたい。
〜例えば「小文字表記を大文字表記にする」という関数を使って、

"うどんセットa、うどんセットb"       ⬇︎ "うどんセット「「1A」」、うどんセット「「1B」」"

というように、抽出した文字列を関数の返り値に変換できれば。
replaceメソッドの用途がグンと広がります ♪

今回はreplaceメソッドの引数に関数の返り値を反映させることで、「法則にしたがった文字列の変換」を実装する方法を紹介します。

引数に関数を記述。


置換先に関数処理を加える。
方法は単純です。replaceメソッドの第2引数に直接関数を記述することです。

文字列.replace(バターン,function(value) { bb〜処理〜 });

第1引数には取り出したものが。

replaceメソッドに含めた関数の第1引数には、パターンにマッチした文字列そのものが入ります。
引数名はユニークなものであればなんでも構いません。

"100円、150円"

⬆︎の値段を表す文字列。価格を1割引のものに置換してみましょう。
正規表現による連続した数字のパターンは、「/[0-9]{1, }/g 」となります。

let str2 = "100円、150円"; str2 = str2.replace(/[0-9]{1,}/g,function(「「5value」」) { bbconsole.log(「「5value」」);「「1 ..①」」 bb「「3▶︎ 100」」 bb「「3▶︎ 150」」 bbreturn Number(「「5value」」)*0.9;「「1 ..②」」 bb}); console.log(str2);「「1 ..③」」 「「3▶︎ 90円、135円」」


① 引数valueを出力すると「100」「150」となり、パターンにマッチした文字列が「value」に渡されていることがわかります。

② 最終的な返り値を指定しています。「return」の値を記述しないと、文字列は「undefined」に置換されてしまうので忘れずに。

③ replace処理後に「str2」を出力すると、それぞれの値段が1割引に置換されました。

アロー関数にするとスマート。


アロー関数を使うと、もっとスマートに記述することができます。

str2 = str2.replace(/[0-9]{1,}/g,(「「5value」」 => Number(「「5value」」)*0.9;)

簡単な処理内容であれば、このほうがコードも見易いですね。




JavaScriptの矢印「=>」、
〜これはアロー関数というものです。

使い方とメリットについて解説。

JavaScriptのアロー関数については、こちら⬆︎の記事で詳しく紹介しています。

外部の関数を呼び出す。


replaceメソッドの引数には、外部で定義した関数を参照させることもできます。

let str3 = "100円、150円"; 「「3//外部で関数を定義」」 function 「「1discount」」(value) { return Number(value)*0.9; } 「「3//第2引数で呼び出す」」 str3 = str3.replace(/[0-9]{1,}/g,「「1discount」」); console.log(str3); 「「3▶︎ 90円、135円」」

外部で関数「discount」を定義し、replaceメソッドの第2引数で呼び出しています。
処理内容が複雑な場合には、このほうが可読性が良いですね。

実践〜HTMLを書き換え。


実際にHTML要素の内容を取得し、関数の返り値に置換するサンプルです。

<p class = "upper"> ・うどんセットa
・うどんセットb </p>


・うどんセットa
・うどんセットb

<p>要素にclass名「upper」を指定しました。replaceに掛けたい場所が複数あるケースを想定しています。
現在、セット「a、b」のところが小文字で記載されています。これを大文字に置換してみましょう。

「「3//class要素をすべて取得」」「「1 ..①」」 let upper = document.querySelectorAll(".upper"); 「「3//大文字に変換する関数」」「「1 ..②」」 function 「「5oomoji」」(komoji) { return komoji.toUpperCase(); } 「「3//クラス要素すべてに処理をする」」「「1 ..③」」 upper.forEach(function(value) { bb「「3//innerTextを書き換え」」「「1 ..④」」 bbvalue.innerText = value.innerText.replace(/[a-z]/g,「「5oomoji」」); });


① 「upper」クラスの要素をすべて取得します。

② 小文字を大文字に変換するための関数です。
これをreplaceメソッドの第2引数に指定すると、引数「komoji」には正規表現パターンにマッチした文字列が渡されるようになります。

③ forEachメソッドで「upper」クラスのすべてに対して処理を行います。

④ 要素のテキストを書き換えます。

・すべてのアルファベットを取り出すパターンは「/[a-z]/g」となるので、これをreplaceの第1引数に。

・第2引数には、先ほど定義した関数「oomoji」を指定します。

・うどんセットa
・うどんセットb

結果⬆︎です。
小文字をすべて大文字に置換することができました。

replace、幅ひろがり。


最後までお読みくださり、ありがとうございます。

今回はreplace関数の引数に関数を適用する方法について紹介してきました。これまでreplaceメソッドは「パターン→単一の文字列」としてしか使えないものだったのが、「パターン→ある法則にしたがった結果」に置換できるようになり、使いどころが劇的にひろがりました。

この方法を使って、入力フォームのチェックなど、色々な場面に活用してくださいね。
ではまた〜 ♪



HTML、丸数字に自動変換。

2022.05.18
〽️ ①〜㊿までを一瞬で入力。


JavaScriptのドルマーク$に中括弧{ }、テンプレートリテラルについて。

2022.02.09
クオテーション祭り、さようなら。


JavaScriptのforEachとは? 〜配列のループメソッドについて。

2022.03.24
HTML要素の一括編集にも。


JavaScriptコードの「?」をまとめたページはこちら⬆︎。











「ふ」です。

swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。