概要: このチュートリアルでは、JavaScriptの正規表現の後方参照とその効果的な適用方法について学びます。
JavaScript正規表現の後方参照の概要
後方参照を使用すると、正規表現のキャプチャグループを参照できます。技術的には、後方参照は正規表現の変数のようなものです。
以下は後方参照の構文です。
\N
Code language: Python (python)
この構文では、N
は1、2、3などの対応するキャプチャグループ番号を表す整数です。
次のように重複した単語 JavaScript
を含む文字列があるとします。
const s = 'JavaScript JavaScript is awesome';
Code language: Python (python)
重複した単語(JavaScript
)を削除して、結果の文字列を以下のようにしたいとします。
'JavaScript is awesome'
Code language: Python (python)
これを行うには、正規表現で後方参照を使用できます。
まず、単語を一致させます。
/\w+\s+/
Code language: Python (python)
次に、単語をキャプチャするキャプチャグループを作成します。
/(\w+)\s+/
Code language: Python (python)
最後に、後方参照を使用して最初のキャプチャグループを参照します。
/(\w+)\s+\1/
Code language: Python (python)
このパターンでは、\1
は(\w+
)キャプチャグループを参照する後方参照です。
最後に、String.replace()
メソッドを使用して、一致全体を最初のキャプチャグループで置き換えます。
const s = 'JavaScript JavaScript is cool';
const pattern = /(\w+)\s+\1/;
const result = s.replace(pattern, '$1');
console.log(result);
Code language: Python (python)
出力
JavaScript is cool
Code language: Python (python)
JavaScript正規表現の後方参照の例
次の例は、後方参照のいくつかの実践的なアプリケーションを示しています。
1) 引用符内のテキストを取得するための後方参照の使用
二重引用符内のテキストを次のように取得するには。
"JavaScript Regex Backreferences"
Code language: Python (python)
または一重引用符。
'JavaScript Regex Backreferences'
Code language: Python (python)
ただし、一重引用符と二重引用符が混在しているわけではありません。
'not match"
Code language: Python (python)
これを行うには、次の正規表現を思いつくかもしれません。
/[\'"](.*?)[\'"]/
Code language: Python (python)
しかし、この正規表現は、一重引用符(')で始まり二重引用符(")で終わるテキスト、またはその逆も一致します。たとえば、
const message = `"JavaScript's cool". They said`;
const pattern = /[\'"].*?[\'"]/;
const match = message.match(pattern);
console.log(match[0]);
Code language: Python (python)
"JavaScript'
を返し、"JavaScript's cool"
を返しません。
これを解決するには、正規表現で後方参照を使用できます。
/([\'"]).*?\1/
Code language: Python (python)
後方参照\1
は最初のキャプチャグループを参照します。サブグループが一重引用符で始まる場合は、\1
は一重引用符に一致します。サブグループが二重引用符で始まる場合は、\1
は二重引用符に一致します。
たとえば、
const message = `"JavaScript's cool". They said`;
const pattern = /([\'"]).*?\1/;
const match = message.match(pattern);
console.log(match[0]);
Code language: Python (python)
出力
"JavaScript's cool"
Code language: Python (python)
2) 連続した1文字以上が繰り返される単語を見つけるための後方参照の使用
次の例では、1文字以上が連続して繰り返される単語を見つけるために後方参照を使用する方法を示します。たとえば、apple
(文字p
が繰り返される)。
const words = ['apple', 'orange', 'strawberry'];
const pattern = /\b\w*(\w)\1\w*\b/;
for (const word of words) {
const result = word.match(pattern);
if (result) {
console.log(result[0], '->', result[1]);
}
}
Code language: Python (python)
出力
apple -> p
strawberry -> r
Code language: Python (python)
要約
- 後方参照を使用して、正規表現内のキャプチャグループを参照します。