{"id":80540,"date":"2024-04-22T08:55:51","date_gmt":"2024-04-21T23:55:51","guid":{"rendered":"https://freelance.indieverse.co.jp/media/?p=80540"},"modified":"2025-11-01T16:33:55","modified_gmt":"2025-11-01T07:33:55","slug":"javascript-replace","status":"publish","type":"post","link":"https://freelance.indieverse.co.jp/media/programming/javascript/javascript-replace","title":{"rendered":"【JavaScirpt】replace完全マニュアル | 置換, 抽出, メタ文字の利用などを解説"},"content":{"rendered":"<p>この記事では、</p>\n<ul>\n<li>特定の文字列を別の文字列に置換する方法を知りたい</li>\n<li>テキスト内の全ての指定した文字や単語を置換したい</li>\n<li>正規表現を使用して複雑なパターンの文字列を置換したい方法を探している</li>\n<li>プログラミング初心者として、replace関数の基本的な使い方を学びたい</li>\n<li>JavaScriptのreplace関数とreplaceAll関数の違いと使い分けについて知りたい</li>\n</ul>\n<p>という悩みを抱えている向けに、</p>\n<ul>\n<li>JavaScriptでの文字列置換の基本から応用まで</li>\n<li>正規表現を駆使した効率的な文字列操作</li>\n<li>replace関数とreplaceAll関数の違いとその使い分け</li>\n</ul>\n<p>について解説していきたいと思います。</p>\n<h2>JavaScriptで文字列を操作する：replaceメソッドの解説</h2>\n<p>本セクションではJavaScriptの<code>replace</code>メソッドに焦点を当て、基本的な使い方から応用技法までを学びましょう。</p>\n<h3>replaceメソッドによる文字の置換</h3>\n<p><code>replace</code>メソッドを使用すると、文字列内の最初に見つかった部分文字列を、指定した文字列に置換することができます。以下のコードでは、<code>\"Hello world!\"</code>という文字列内の<code>\"world\"</code>を<code>\"JavaScript\"</code>に置換しています。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"Hello world!\";\r\n\r\nlet newStr = str.replace(\"world\", \"JavaScript\");\r\n\r\nconsole.log(newStr); // \"Hello JavaScript!\"</code></pre>\n</div>\n<p>なお、<code>replace</code>メソッドの基本的な構文は以下の通りです。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let result = str.replace(regexp|substr, newSubstr|function)</code></pre>\n</div>\n<ul>\n<li><code>regexp|substr</code>は、置換対象の文字列または正規表現パターンです。</li>\n<li><code>newSubstr|function</code>は、置換後の文字列または置換を定義する関数です。</li>\n</ul>\n<h3>replaceAllメソッドによる全文字の置換</h3>\n<p><code>replaceAll</code>メソッドは、指定したパターンに一致するテキストを文書全体で置換するために使用します。これは<code>replace</code>メソッドと似ていますが、全ての一致を置換する点が異なります。</p>\n<p>以下のコードは、<code>\"World\"</code>という単語が複数回出現している文字列を置換する例です。<code>replace</code>メソッドを使用した場合は1回目の<code>\"World\"</code>のみが<code>\"JavaScript\"</code>に置換されますが、<code>replaceAll</code>メソッドを使用した場合には全ての<code>\"World\"</code>が置換されています。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"Hello World! World is wonderful.\";\r\n\r\n//replaceを使用した場合\r\nlet newStr = str.replace(\"World\", \"JavaScript\");\r\n\r\nconsole.log(newStr); // \"Hello JavaScript! World is wonderful.\"\r\n\r\n//replaceAllを使用した場合\r\nlet newStrAll = str.replaceAll(\"World\", \"JavaScript\");\r\n\r\nconsole.log(newStrAll); // \"Hello JavaScript! JavaScript is wonderful.\"</code></pre>\n</div>\n<h2>正規表現を使用した柔軟な文字列置換</h2>\n<p>正規表現は、パターンマッチングとテキスト処理の強力なツールです。JavaScriptの<code>replace</code>メソッドと組み合わせることで、柔軟な置換操作が可能になります。</p>\n<h3>正規表現の基本と応用</h3>\n<p>正規表現を使用することで、特定のパターンに一致するテキストの抽出や置換が簡単に行えます。例えば、全ての空白文字を除去する場合、以下のように書けます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"Hello World! \";\r\n\r\nlet newStr = str.replace(/\\s+/g, \"\");\r\n\r\nconsole.log(newStr); // \"HelloWorld!\"</code></pre>\n</div>\n<p>この例では、<code>\\s+</code>の正規表現が1つ以上の空白文字にマッチし、<code>g</code>フラグが全体を対象としています。その結果、全ての空白文字が除去されます。</p>\n<h3>正規表現とgフラグを用いたグローバル置換</h3>\n<p>正規表現に<code>g</code>（グローバル）フラグを付けることで、テキスト内の全てのマッチに対して置換を行うことができます。これは<code>replaceAll</code>メソッドと似ていますが、より柔軟なパターンを指定できるという利点があります。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"The rain in SPAIN stays mainly in the plain\";\r\n\r\nlet newStr = str.replace(/ain/gi, \"0\");\r\n\r\nconsole.log(newStr); // \"The r0 in SP0 stays m0ly in the pl0\"</code></pre>\n</div>\n<p>この例では、<code>/ain/gi</code>正規表現を使っていて、<code>ain</code>にマッチするすべての文字列を<code>\"0\"</code>に置換しています。<code>i</code>フラグは大文字小文字を区別しないことを意味します。</p>\n<h2>replaceメソッドの応用例</h2>\n<p>replaceメソッドはさまざまなシチュエーションで柔軟に活用できる非常に強力なツールです。ここでは、言語処理やデータ処理における応用例をいくつか紹介します。</p>\n<h3>文字列内の特定パターンの置換</h3>\n<p>ウェブ開発では、ユーザー入力やテキストデータのクリーニングにreplaceメソッドがよく使われます。特定のフォーマットに合わせるために、特定のパターンや不要な文字を除去するのに役立ちます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"This is an email: example@example.com\";\r\n\r\nlet newStr = str.replace(/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4})/, '&lt;a href=\"mailto:$1\"&gt;$1&lt;/a&gt;');\r\n\r\nconsole.log(newStr); // \"This is an email: &lt;a href=\"mailto:example@example.com\"&gt;example@example.com&lt;/a&gt;\"</code></pre>\n</div>\n<p>この例では、Eメールアドレスに一致するパターンを、メールリンクのHTMLに置換しています。</p>\n<h3>関数を使用した動的な文字列置換</h3>\n<p>replaceメソッドには、第二引数に関数を指定することもできます。これにより、マッチした各部分に対して動的に置換文字列を生成することができます。<code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"10 times 20 equals 200\";\r\n\r\nlet newStr = str.replace(/\\b(\\d+)\\b/g, (match, num) =&gt; Number(num) * 2);\r\n\r\nconsole.log(newStr); // \"20 times 40 equals 400\"</code></pre>\n</div>\n<p>このコードでは、数字に一致する部分を検出し、その数字を2倍に置換しています。</p>\n<h2>JavaScriptのreplace関数による高度な文字列操作</h2>\n<p>JavaScriptのreplace関連関数を駆使することで、編集作業やデータ処理を大幅に自動化し、効率化することができます。</p>\n<h3>改行コードの置換や空白の削除</h3>\n<p>テキストデータの整形や前処理では、不要な空白や改行の削除がしばしば必要になります。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"This\\nis a\\nmultiline\\ntext.\";\r\n\r\nlet newStr = str.replace(/\\n/g, \" \");\r\n\r\nconsole.log(newStr); // \"This is a multiline text.\"</code></pre>\n</div>\n<p>この例では、改行コードを単一のスペースに置換して、テキストを1行に整形しています。</p>\n<h3>数値や特殊文字の置換パターン</h3>\n<p>特定の条件に基づいた数値や特殊文字の置換も、replace関数を使って簡単に実装できます。<code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"I have 100 dollars and 15 cents.\";\r\n\r\nlet newStr = str.replace(/(\\d+)/g, \"$$$1\");\r\n\r\nconsole.log(newStr); // \"I have $100 dollars and $15 cents.\"</code></pre>\n</div>\n<p>このコードでは、数字に一致するすべての部分を、その前にドル記号を付加する形で置換しています。</p>\n<h2>replaceとreplaceAllの違いと使い分け</h2>\n<p><code>replace</code>メソッドと<code>replaceAll</code>メソッドは似ていますが、<code>replace</code>メソッドは最初に見つかった部分のみを置換し、<code>replaceAll</code>は文書全体のマッチするすべての部分を置換します。この違いを正しく理解し、それぞれの場面で適切に使い分けることが重要です。</p>\n<h3>replaceメソッドとreplaceAllメソッドの比較</h3>\n<p><code>replace</code>メソッドは、正規表現に<code>g</code>フラグを使用することで<code>replaceAll</code>メソッドと同様の振る舞いをすることが可能です。しかし<code>replaceAll</code>メソッドはこのフラグなしでも文書全体の置換を行います。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"fooBar fooBar fooBar\";\r\n\r\nconsole.log(str.replace(/foo/g, \"bar\")); // \"barBar barBar barBar\"\r\n\r\nconsole.log(str.replaceAll(\"foo\", \"bar\")); // \"barBar barBar barBar\"</code></pre>\n</div>\n<h3>IE11など古いブラウザでの対応策</h3>\n<p><code>replaceAll</code>メソッドは比較的新しいため、古いブラウザではサポートされていないことがあります。そのような場合、<code>replace</code>メソッドと正規表現の組み合わせを利用することで同様の結果を得ることができます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"fooBar fooBar fooBar\";\r\n\r\nlet newStr = str.replace(/foo/g, \"bar\"); // IE11でも問題なく動作する\r\n\r\nconsole.log(newStr); // \"barBar barBar barBar\"</code></pre>\n</div>\n<p>また、<code>Node.js</code><span>で<code>replaceAll</code>メソッドを使用してエラーになるケースもあります。これは、<code>replaceAll</code>メソッドがバージョンが15からのみサポートしているためです。</span></p>\n<p><span>このように<code>replaceAll</code>メソッドはブラウザごとに互換性が異なるので注意しましょう。以下の表は、ブラウザの互換性をまとめたものです。</span></p>\n<table style=\"border-collapse: collapse; width: 100%; height: 312px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 120px; text-align: center;\" rowspan=\"5\"><i class=\"fas fa-desktop\"></i></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>Chrome </span></td>\n<td style=\"width: 33.3333%; height: 24px;\">85<span> (Released 2020-08-25)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Edge</span></td>\n<td style=\"width: 33.3333%; height: 24px;\">85<span>(Released 2020-08-27)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Firefox</span></td>\n<td style=\"width: 33.3333%; height: 24px;\">77<span>(Released 2020-06-02)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Opera</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>71</span><span> (Released 2020-09-15)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Safari</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>13.1</span><span> (Released 2020-03-24)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 144px; text-align: center;\" rowspan=\"6\"><i class=\"fas fa-tablet-screen-button\"></i></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span> Chrome Android</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>85</span><span> (Released 2020-08-25)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Firefox for Android</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>79</span><span> (Released 2020-07-28)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Opera Android</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>60</span><span> (Released 2020-09-23)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Safari on iOS</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>13.4</span><span> (Released 2020-03-24)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Samsung Internet</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>14.0</span><span> (Released 2021-04-17)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>WebView Android</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>85</span><span> (Released 2020-08-25)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 48px; text-align: center;\" rowspan=\"2\"><i class=\"fas fa-server\"></i></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>Deno</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>1.2</span><span> (Released 2020-07-13)</span></td>\n</tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 33.3333%; height: 24px;\"><span>Node.js</span></td>\n<td style=\"width: 33.3333%; height: 24px;\"><span>15.0.0</span><span> (Released 2020-10-20)</span></td>\n</tr>\n</tbody>\n</table>\n<p>参照：<a href=\"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll\" target=\"_blank\" rel=\"noopener\">MDN Web Docs: String.prototype.replaceAll()</a></p>\n<h2>文字列操作の補助技：splitとjoinの組み合わせ</h2>\n<p>時には、<code>replace</code>や<code>replaceAll</code>よりも<code>split</code>と<code>join</code>を組み合わせた方が直感的に問題を解決できることがあります。これは特に、特定の文字やパターンで文字列を区切り、それぞれの部分を変換した後に再組み立てしたい場合に便利です。</p>\n<h3>splitとjoinによる置換の実例</h3>\n<p><code>split</code><span>は、パターンを受け取り、</span><code>String </code><span>をパターン検索によって部分文字列の順序付きリストに分割し、これらの部分文字列を入れた配列を返します。また<code>join</code> は <code>Array</code>インスタンスのメソッドで、配列の全要素を順に連結した新しい文字列を返します。</span></p>\n<p>以下の例では、カンマで区切られた文字列内の数字を括弧で囲みます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>let str = \"1,2,3,4,5\";\r\n\r\nlet parts = str.split(\",\");\r\n\r\nlet transformedParts = parts.map(part =&gt; `(${part})`);\r\n\r\nlet newStr = transformedParts.join(\",\");\r\n\r\nconsole.log(newStr); // \"(1),(2),(3),(4),(5)\"</code></pre>\n</div>\n<p>このアプローチは、元の文字列を部分的に分解し、各部分を個別に処理してから再結合する場合に特に有用です。</p>\n<p>JavaScriptの文字列操作は非常に強力で、データ処理からUIの動的変更まで幅広い用途に使用できます。本記事で紹介した<code>replace</code>メソッドを始めとする文字列操作の技術をマスターすることで、JavaScript開発の幅を広げることができるでしょう。</p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScriptのreplace/replaceAllの違いと使い分け、正規表現やg・iフラグ、関数置換まで基本から応用をコード例で解説します。初心者でも安心の文字列置換・抽出・メタ文字の使い方を網羅します。</p>\n","protected":false},"author":105,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[192],"tags":[316],"class_list":["post-80540","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-java"],"aioseo_notices":[],"meta_description":"JavaScriptのreplace/replaceAllの違いと使い分け、正規表現やg・iフラグ、関数置換まで基本から応用をコード例で解説します。初心者でも安心の文字列置換・抽出・メタ...","_links":{"self":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts"}],"about":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/types/post"}],"author":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/users/105"}],"replies":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/comments?post=80540"}],"version-history":[{"count":10,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80540/revisions"}],"predecessor-version":[{"id":93419,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80540/revisions/93419"}],"wp:attachment":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/media?parent=80540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/categories?post=80540"},{"taxonomy":"post_tag","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/tags?post=80540"}],"curies":[{"name":"wp","href":"https://api.w.org/{rel}","templated":true}]}}