Command Palette

Search for a command to run...

Regex Replace: エディターに触れることなく、正規表現を見つけて置き換えます

Regex Replace: エディターに触れることなく、正規表現を見つけて置き換えます

T
Toolz Team
|Aug 23, 2026|17 分読んでください

正規表現 コレクションの一部

これを構築させたタスクは退屈でした、まさにそれが自動化する価値がある理由です クライアントは私にすべての日付がアメリカ風に書かれた4,000 行の輸出を手渡しました、 01/15/2024、そしてそれが入っていたシステムはISOを望んでいました、 2024-01-15. plain find-and-replace はそれに触れることができませんでした, なぜなら検索する固定文字列がなかったからです - 日付は全て異なっていました. 彼らが共有したのは a :2 桁、スラッシュ、2 桁、スラッシュ、4 桁 それが正規表現が一致するようなもので、正規表現の置換が1 回のパスで書き換えるようなもので、正規表現を1 回のパスでスクラッチツールに貼り付け、1 つの式を書き、エクスポート全体が1 秒の下に反転した形式になりました。

それが自由な仕事です Regex 置き換える ツールはそうします、そしてこのガイドは、それをうまく使う方法の長いバージョンです。 regexの置換が実際に何であるか、キャプチャグループのバックリファレンスがテキストを削除するだけではなく再構築できるようにする方法、すべての特別な置換トークンが何を意味するのか、そして人々をトリップする間違いの隣に座っています 正規表現テスター 別々に書きました - テスターはパターンが一致するものを教えてくれます そしてこのツールは一致するものを書き換えます 正規表現自体があなたにとって新しい場合は、 から始めます 完全なコーディングツールガイド そして戻ってきて.

tl;dr: 正規表現置換はテキストをパターンでマッチさせ、置換文字列でマッチごとに書き換えます。 ()の中で再利用したい部分をラップして番号付きグループを作り、置換で参照します $1$2、など - パターン (\d{4})-(\d{2})-(\d{2}) 置き換え と $3/$2/$1 回る 2024-01-1515/01/2024。 をオンにします g すべての一致を置き換えるフラグを立て、一致を削除するには置換を空のままにして使用します $<name> 名前付きグループに対して。 The Regex 置き換える ツールはブラウザ内で完全に実行され、置換数がライブで表示されます。

正規表現の置換とは何ですか?

普通のfind-and-replaceは文字通りのテキストで動作します: あなたが探している正確な単語とその場所に置く正確な単語を入力します。 変更したいものが固定された文字列ではなくパターンである瞬間に失敗します - 百形式のいずれかの日付、電話番号、HTMLタグ、末尾の空白の実行、規則に従う変数名 正規表現はそのパターンを記述し、正規表現の置換は各一致をどのように書き換えるべきかを記述するテンプレートとそれをペアにします。

機構は2 つの半分を持っています。 the パターン は、エンジンがテキストをスキャンして、形状が発生するすべての場所を見つける正規表現です。 the 交換 はマッチごとに代入される文字列です 最も単純なケースでは、置換はプレーンテキストであり、すべてのマッチは同じものになります - たとえば、タブとスペースのすべての実行を単一のスペースに正規化するのに役立ちます 強力なケースは、置換がマッチした部分を参照し直す場合であり、そのため、出力は固定定数ではなく入力から構築されます。それが、正規表現の置換を、鈍的な削除と再入力から本物の再構築ツールに変えるものです。

ボンネットの下には、 Regex 置き換える ツールはjavascriptを使用します RegExp エンジンと String.prototype.replace すべてのブラウザと Node.js が出荷するメソッド これは実用的な理由から重要です: ツールに表示される動作は、同じパターンと置換を独自の JavaScript または TypeScript コードに貼り付けた場合に得られる動作と同一です。学習する個別のフレーバーはなく、スクラッチ ツールから本番環境に移行しても驚くことはありません。ツールが受け入れる置換構文 - $1$&$<name> そして残りは、標準が定義し、文書化されている正確な構文です MDN&#39; s String.replace リファレンス

キャプチャグループのバックリファレンスはどのように機能しますか?

これは正則置換において最も有用な唯一の考えであり、 のために減速する価値がある。 括弧の中にパターンの一部を入れると、 を作る 捕獲グループ.エンジンは,そのグループがマッチしたテキストを記憶し,グループを1 から左から右に番号付けする.置換文字列では, $1 手段 &quot; 最初のグループがキャプチャしたものは何でも挿入します。 &quot; $2 2番目、そして以下まで $99

日付の例では具体化します パターンは (\d{4})-(\d{2})-(\d{2}) 4 桁の年、2 桁の月、2 桁の日の3 つのグループがあり、一致したとき 2024-01-15、群一が成り立つ 2024、群2 が成り立つ 01、 と群 三 が成り立つ 15。 の 置き換え $3/$2/$1 次に、それらのピースから異なる順序で異なるセパレーターを使用して新しいストリングを組み立て、生成します 15/01/2024.何も削除されず、再入力もされなかった - 出力はキャプチャされたフラグメントから文字通り再構築される トークンの順序を変更し、それらの間の句読点を変更し、他のテキストでラップし、ファイル内のすべての日付を1 つの式で再フォーマットした。

名前付きグループは、読み取り可能なラベルを持つ同じアイデアです。 括弧を数える代わりに、あなたは書きます (?<year>\d{4}) そして、置換でそれを次のように参照します $<year>。 2 つまたは 3 つのグループを持つパターンの場合、数字は問題ありませんが、5 つまたは 6 つをジャグリングすると、名前を使用すると、パターンと置換の両方がはるかに読みやすくなり、後で変更しやすくなります。ツールは両方を互換的にサポートしているため、混合できます $1 あんど $<name> 必要に応じて同じ置換で。最初にパターンを組み立てているときに、どのグループが必要かまだわからない場合は、 正規表現ビルダー 交換を実行するためにここに持ってくる前に、少しずつ構築するのに役立ちます。

特別な置換トークンは何を意味しますか?

ドル記号は置換文字列の中で特別であり、番号と名前の付いたグループを超えた小さなトークンのセットが導入されます。それらを知ることで、必要以上に複雑なパターンに手を伸ばすことができなくなります。

$& 一致した部分文字列全体を挿入します。これは、一致を再構築するのではなく、一致をラップまたは注釈付けするときに必要なものです。のパターンです \b\w+@\w+\.\w+\b の置き換えで <$&> グループ内の全体をキャプチャする必要なく、すべての電子メール アドレスの周りに角括弧を囲みます。 $\`` (a backtick) inserts everything *before* the match, and $&#39;(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$ をis special, outputting a literal dollar sign requires doubling it:$ $in the replacement produces a single出力では $`、通貨を再フォーマットする日に重要です。

メモリにコミットする価値のある削除のイディオムが1 つあります: 空の置換はすべての一致を削除します グローバルフラグがオンで、置換フィールドが空白のままにすると、ツールはテキストからパターンの各発生を削除する最もクリーンな方法です - すべてのHTMLタグ付き <[^>]+>、 を持つすべての末尾の空間 +$ マルチライン モードでは、電話番号からのすべての数字以外の数字が表示されます \D。スペースやプレースホルダーに置き換えていません。何も置き換えていないと、一致は消えてしまいます。

交換にはどのフラグが重要ですか?

正規表現上のフラグは適用方法を変え、そのうちの 2 つは日常の交換作業を支配します。残りは状況に応じて決定的なものですが、場合によっては決定的なものになります。

グローバルフラッグ 、 g、最も切り替わるものです。 がなければ、JavaScript&#39; s replace のみが変更されます 先に 一致してテキストの残りの部分だけを残します - これは標準です String.replace replace-allを期待する人々の行動と驚き。 回る g on とテキスト内のすべてのマッチが書き換えられます。 tool defaults to global on, because replaceing everything is what people mean nineteen times of twenty, but the toggle is there for the times you genuely want to touch only the first occurrence. tool i、文字の大文字と小文字にかかわらずパターンを一致させるので、 error も 合わせ Error あんど ERROR - ログレベルを正規化したり、一貫性のない大文字化を調整したりする場合に不可欠です。

多行旗、 m、アンカーが何を変更します ^ あんど $ 平均: それをオンにすると、それぞれの開始と終了と一致します ライン テキスト全体のではなく、末尾の空白を剥がしたり、すべての行に接頭辞を付けるときに必要なものです。 dotAll フラグ、 s、ドットが改行文字と一致するようにするので、パターンは改行にまたがる可能性があります - 複数行のブロックを書き換えるのに便利です u (unicode) および y (粘着性のある)フラグは、高度なケース用です: u 基本平面および特定のエスケープ フォームの外側の文字を正しく処理できるようにします y 各試合のアンカーは、前の試合の後に正確な位置を試みます。以下の比較表は、各試合がいつ順位を獲得するかをまとめたものです。

手紙 交換品への影響 通常の使用
グローバル g 最初の試合だけではなく、すべての試合を置き換えます ほぼすべての交換品
大文字と小文字を無視 i 文字の大文字と小文字に関係なく一致します ログレベルの正規化、大文字化の整理
マルチライン m ^ あんど $ 各ラインにアンカー 行の接頭辞、末尾のスペースの削除
ドットオール s ドットは改行とも一致します マルチラインブロックの書き換え
ユニコード u アストラル文字の正しい扱いと \u{...} 絵文字、非ラテン文字
粘着性 y 現在の位置でのみ一致します トークナイザー、厳密な逐次解析

単純な find-and-replace の代わりに regex replace を使うのはいつですか?

分割線は単純です: 正確なテキストがわかっているときは平易な find-and-replace を使い、正確なテキストがわかっていないときは regex replace のリーチを使います。 if you are changing every 2023 にする 2024、普通の置換はより速く、より安全です。 4桁の年ごとに値に関係なく変更する場合は、パターンだけがそれを表現できます。

タスクの3 つのファミリーは明らかに正則側に落ちます. 1 つ目は 再フォーマット、コンテンツは同じままですが、その配置が変更される場所 - 日付、電話番号、書かれた名前 &quot; Last, First&quot; あなたが &quot; First Last.&quot; として必要なグループをキャプチャし、さらに再順序付けされた置換は、これらのすべてを処理します 2 番目は バルクストリッピング、パターンに一致するものすべて - タグ、コメント、コントロール文字、余分な空白 - を何も置き換えることによって削除します。 3つ目は スケールでの条件付き編集、パターンのすべての出現をラップ、プレフィックス、または注釈付けする場所、を使用して $& 一致を保ち、それに追加するため。 自分自身に記述している変換に &quot;every&quot; という単語が含まれている場合、その後にリテラル文字列ではなく記述が続くと、regex-replace の領域になります。

ワークフロー引数もあります. code editor&#39;s find-and-replace でこれらの編集を行うと動作しますが, その場でファイルを編集します.つまり, 間違いは実際のファイルの間違いです. scratch ツールで変換を実行すると, まず何かをコミットする前に出力と置換カウントを確認してから, 検証された結果を貼り付けることができるからです. Regex 置き換える ツールは完全にブラウザで実行され、貼り付けたものをアップロードすることはありません。テキストが実稼働ログまたは顧客のエクスポートである場合でも安全に使用できます。この点は、私が完全に指摘しています オンライン ツールのデータ プライバシー ガイド

Regex replace でよくある間違いは何ですか?

最も頻繁なものは、グローバルフラグを忘れて、なぜ最初の試合だけが変更されたのか疑問に思っています あなたの交換がほとんど何もしていないように見える場合 - あなたが数十を期待していた1 つの編集 - それを確認してください g はオンです。ツールのデフォルトではオンになるほど一般的なトリップですが、1 つの一致をターゲットにするためにオフにした瞬間は、忘れずに元に戻してください。

2 つ目はリテラルです $1 キャプチャされたテキストを期待した出力に表示されます。 それはほとんど常に、参照しているグループが存在しないことを意味します - あなたのパターンには最初の括弧のセットがないため、何もありません $1 代理として、エンジンがトークンをそのまま残すこと 修正は、再利用したい部分を括弧で囲んでグループを作成し、グループを 1 から左から数えることです。関連するトラップは、パターンにネストされたグループまたはオプションのグループがある場合にカウントを誤ります。番号付けが混乱したら、参照が明確になるように名前付きグループに切り替えます。

3つ目の間違いは 意図した以上に一致するパターンです 通常 数量指定子が貪欲だからです 3つ目の間違いは 意図した以上に一致するパターンです 3つ目の間違いは 量指定子が貪欲であるようなパターンです <.+> 1 つのHTMLタグを一致させることを意味し、最初のものから喜んで一致します < に the 最後の > ライン上では、2 つのタグ間のすべてを飲み込む 治療法は非貪欲な量化子、 <.+?>、またはより正確な文字クラス、 <[^>]+>。 これはまさに、のパターンを検証する状況です 正規表現テスター まず、ハイライトされているものを見て、それからのみ交換を実行します - 習慣 regex-testerガイド 詳細に説明します。ツールに示されている交換回数は、もう 1 つの安全策です。変更する予定のものの数よりもはるかに多い、またははるかに少ない交換回数を報告する場合、パターンは間違っており、ツールではありません。

実用的な例: 名前の再フォーマットとノイズの除去

端から端まで小さなジョブを通してみましょう。ピースが連携して動作するのを見ると、どのルールよりもアイデアがうまく修正されるからです。 としてエクスポートされた連絡先のリストがあるとします Doe, Jane あんど Smith, John、1 行に 1 つ、そして、それらを次のようにします Jane Doe あんど John Smith

各行の形は: いくつかの単語文字、カンマ、スペース、そしてさらに単語文字です。 であるパターンとして (\w+), (\w+)、グループ1 でキャプチャされた姓とグループ2 で与えられた名前を持つ。 を入れ替えてカンマを落とす置換は $2 $1 ー グループ2、スペース、グループ1 リストをに貼り付けます Regex 置き換える ツール、そのパターンと置換を入力し、グローバルフラグをオンにしておくと、すべての行が &quot; First Last&quot; に一度に切り替わります。置換カウントは、タッチされた行の数を示し、連絡先の数と照合して正気を確認できます。

ここで、同じエクスポートが、同様に消したい行に末尾の空白があるとします。これは、2 番目の個別の置換であるパターンです +$ 多行旗を掲げて $ 各行の末尾に一致し、空の置換により一致したスペースは置換されるのではなく削除されます。 name swap の後に実行すると、ファイルはクリーンです。 2 パス アプローチ (1 つは再構成、もう 1 つはストリップへの置換) は典型的であり、各パスはコピーアウトする前にその出力とカウントを示すため、変換が意図したとおりに実行されたかどうかを推測することはありません。再形成されたテキストが、他に何も移動していないことを確認するために、オリジナルに対して最終的な視覚的な差分が必要な場合は、両方のバージョンを に貼り付けます テキスト差 ツール。これが収まる日常のユーティリティのより広範なキットについては、 Web 開発者ツールキット 私が最もリーチするものを集めます。

よくある質問

オンラインで正規表現を見つけて置き換えるにはどうすればよいですか? スラッシュなしでパターンを入力し、置換フィールドに置換を書き込み、フラグを選択してテキストを貼り付けます。書き換えられた出力は即座に表示され、実行された置換の数を示します。ブラウザではすべてが発生するため、何もアップロードされません。

置換ではキャプチャグループのバックリファレンスはどのように機能しますか? パターン内の括弧は番号付きグループを作成し、 $1, $2 などと置換して再利用します。 たとえば、 $3/$2/$1 と置換したパターン (\d{4}) - (\d{2}) - (\d{2}) は 2024-01-15 を 15/01/2024 に変えます。 (?) のような名前付きグループ\d{4} は $ として参照されます

最初の試合だけでなく、すべての試合を置き換えるにはどうすればよいですか? g (global) フラグを有効にする それがないと、String.replace メソッドの動作とまったく同じように、JavaScript は最初のマッチのみを置き換えます。 g を有効にすると、テキスト内のすべてのマッチが置き換えられます。これは、ほとんどの replace-all タスクに必要なものです。

すべてのマッチを置き換えるのではなく、削除するにはどうすればよいですか? Replace フィールドは空のままにします。 global フラグをオンにすると、各マッチはテキストから削除されます。これは、パターンを共有するタグ、空白の実行、または不要な文字を削除する最もクリーンな方法です。

置換における特別なトークン $&amp; 、 backtick 、および apostrophe は何を意味しますか? $&amp; はマッチした部分文字列全体を挿入し、バックティックはマッチする前のテキストを挿入し、アポストロフィはその後のテキストを挿入します。リテラルドル記号を出力するには、$$ と書きます。これらは標準の JavaScript String.replace 特殊な置換パターンに従います。

このツールはどのようなregexフレーバーを使用していますか? ブラウザに組み込まれている JavaScript (ECMAScript) RegExp エンジンを使用します。これは Node.js のエンジンと同じです。ここでの結果は、JavaScript と TypeScript で同じパターンと置換がどのように動作するかと一致します。 JavaScript regex は、一部の高度な機能において PCRE、Python re、および Java とは異なります。

なぜ私の置換はキャプチャされたテキストの代わりにリテラル$ 1 を生成しますか? 出力にリテラル $1 が入っているということは、通常、パターンに最初のキャプチャ グループがないため、$1 を参照するものは何もありません。再利用したい部分を括弧で囲んでグループを作成し、1 から左から右にグループを数えます。

機密データに対して regex replace を実行しても安全ですか? はい。 matching と replaced はすべてブラウザ内の JavaScript で行われるため、パターン、置換、テキストはどのサーバーにも送信されず、ログも記録されず、ツールは接続を無効にした状態で動作します。 log ファイル、個人データ、または独自の形式を安全に再フォーマットできます。


このガイドは無料に付属しています Regex 置き換える Toolz.dev上のツール - サインアップなし、アップロードなし、オフラインで動作します。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!