正規表現: 貪欲ではない数量限定子

要約: このチュートリアルでは、非貪欲数量限定子を使用する方法を学びます。非貪欲数量限定子により、それらの前に配置された要素とできるだけ照合する回数が少なくなります。

JavaScript 正規表現の非貪欲 (または遅延) 数量限定子への入門

正規表現では、数量限定子を使用すると、それらの前に配置された要素に指定回数だけ照合できます。

デフォルトでは、数量限定子は照合に 貪欲モード を使用します。貪欲モードでは、数量限定子は可能な限り多くの回照合を行い、最も長い結果を返します。数量限定子が貪欲モードを使用する場合、貪欲数量限定子と呼ばれます。数量限定子チュートリアル では、*+? などの貪欲数量限定子の使い方を学びました。

貪欲モードに加え、数量限定子は非貪欲モードまたは遅延モードでも動作します。遅延モードでは、数量限定子は可能な限り少ない回数それらの前に配置された要素と照合し、最も短い結果を返します。数量限定子が遅延モードを使用する場合、それらは通常、非貪欲数量限定子または遅延数量限定子と呼ばれます。

貪欲数量限定子を非貪欲数量限定子に変換するには、感嘆符を追加します。次の表に、貪欲数量限定子とその対応する遅延数量限定子を示します。

貪欲数量限定子遅延数量限定子意味
**?それらの前に配置された要素と 0 回以上照合します。
++?それらの前に配置された要素と 1 回以上照合します。
???それらの前に配置された要素と 0 回または 1 回照合します。
{ n }{ n }?それらの前に配置された要素と正確に n 回照合します。
{ n ,}{ n ,}?それらの前に配置された要素と少なくとも n 回照合します。
{ n , m }{ n , m }?それらの前に配置された要素と n から m 回照合します。

JavaScript 非貪欲数量限定子例

次のプログラムは、非貪欲数量限定子 (+?) を使用して、ボタン要素の引用符 ("") 内のテキストを照合します。

const s = '<button type="submit" class="btn">Send</button>'
const pattern = /".+?"/g;

const result = s.match(pattern)
console.log(result);Code language: JavaScript (javascript)

出力

['"submit"', '"btn"']Code language: Python (python)

要約

  • 遅延数量限定子は、それらの前に配置された要素とできるだけ少ない回数照合し、可能な限り短い結果を返します。
  • 感嘆符 (?) を使用して、貪欲数量限定子を遅延数量限定子に変換します。
このチュートリアルは役に立ちましたか?