「「5文字列」」.replace(regexp,「「1(value) => 返り値」」);
こんにちは、「ふ」です。
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〜処理〜 });
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要素の内容を取得し、関数の返り値に置換するサンプルです。
<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メソッドは「パターン→単一の文字列」としてしか使えないものだったのが、「パターン→ある法則にしたがった結果」に置換できるようになり、使いどころが劇的にひろがりました。
この方法を使って、入力フォームのチェックなど、色々な場面に活用してくださいね。
ではまた〜 ♪
HTML、丸数字に自動変換。
2022.05.18
〽️ ①〜㊿までを一瞬で入力。
JavaScriptのドルマーク$に中括弧{ }、テンプレートリテラルについて。
2022.02.09
クオテーション祭り、さようなら。
JavaScriptのforEachとは? 〜配列のループメソッドについて。
2022.03.24
HTML要素の一括編集にも。
JavaScriptコードの「?」をまとめたページはこちら⬆︎。
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。