JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで否定後読み(ネガティブ・ルックビハインド)を実現する方法

JavaScriptで否定後読み(ネガティブ・ルックビハインド)を実現する方法

JavaScriptで「否定後読み」に相当する処理を実装したい場合、キャプチャグループを活用した次の正規表現パターンが定番のテクニックとして知られています。

(^|[^\\])"

このパターンは、次のような要素で構成されています。

  • ^ … 文字列の先頭位置にマッチ
  • [^\\] … バックスラッシュ(\)以外の任意の1文字にマッチ
  • | … 先頭位置またはバックスラッシュ以外の文字のいずれかに合致し、該当部分をキャプチャグループとして記録

つまり、この正規表現は「文字列の先頭」または「バックスラッシュ以外の文字」の直後に続くダブルクォート(")だけを検出します。そのため、\" のようにエスケープ済みのダブルクォートは対象外となり、誤った置換を防ぐことができます。

ダブルクォートをシングルクォートへ置換するコード例

実際に置換を行うには、String.prototype.replace() メソッドと組み合わせて次のように記述します。

str.replace(/(^|[^\\])"/g, "$1'")

ポイントは置換文字列内の $1 です。$1 は第1キャプチャグループ(先頭位置、またはバックスラッシュ以外の文字)を参照するため、元の文字列の構造を保ちながら、ダブルクォートの部分だけをシングルクォート(')へ置き換えられます。

補足:ES2018以降ではネイティブの後読みアサーションが利用可能

ES2018(ES9)以降のJavaScriptでは、後読みアサーション(lookbehind assertion)が標準仕様に組み込まれています。最新のブラウザやNode.jsであれば、(?<!\\\\)" のように否定後読みを直接記述することも可能です。ただし、Internet Explorerなどの旧環境ではサポートされていないため、幅広い環境での互換性が必要なケースでは、本記事で紹介した (^|[^\\]) パターンによる代替手法が今なお有効です。

  1. JavaScriptでelement.classListをクリアする方法|remove()の使い方を解説

    JavaScriptで要素のクラスをクリア(削除)するには、classList.remove()メソッドを使用します。このメソッドを使えば、指定したクラス名だけを簡単に取り除くことができます。 classList.remove()の基本 classList.remove()は、削除したいクラス名を引数として渡すだけで動作します。カンマ区切りで複数のクラス名を指定すれば、同時に複数のクラスを削除することも可能です。 サンプルコード 以下は、ボタンをクリックすると要素からクラスを削除する実装例です。 <!DOCTYPE html> <html lang="en"

  2. JavaScriptでToDoリスト(やることリスト)を作成する方法

    JavaScriptを使えば、テキストボックスに入力したタスクを順番にリストへ追加していく、シンプルなToDoリスト(やることリスト)を簡単に作成できます。この記事では、HTML・CSS・JavaScript(jQuery)を組み合わせた基本的な実装例を、コードと実行手順とあわせて紹介します。 実装例 以下は、ToDoリストを作成するためのコードです。 <!DOCTYPE html> <html lang="en"> <head>    <meta charset="UTF-8"> &n