代替と部分式
正規表現中の代替によって、2 つ以上の代替表現の間の選択肢をグループ化できます。 基本的には、パターンで "this OR that" を指定できます。
部分式を使用すると、検索するテキスト内のパターンを照合し、一致を個別のサブマッチに分割できます。 結果のサブマッチは、プログラムで取得できます。 部分式では、「JScript での逆参照」で説明するように、テキストの書式を再設定することもできます。
正規表現の詳細については、「正規表現の作成」および「正規表現の構文」を参照してください。
代替
パイプ (|) 文字を使用して、2 つ以上の代替表現の間の選択を指定できます。 これを代替と呼びます。 パイプ文字の左右にある式のうち最も大きい式と一致します。 次に示す JScript 表現は、1 桁または 2 桁の数字が続く "Chapter" または "Section" と一致するように思われます。
/Chapter|Section [1-9][0-9]{0,1}/
代わりに、正規表現は、"Chapter" という単語、または "Section" という単語とそれに続く数字と一致します。 検索される文字列が "Section 22" である場合は、"Section 22" と一致します。 ただし、検索される文字列が "Chapter 22" である場合は、"Chapter 22" と一致する代わりに "Chapter" という単語と一致します。
かっこを使った代替
かっこを使用して代替の範囲を制限し、代替表現が "Chapter" と "Section" の 2 つの単語だけに適用されるようにすることができます。 かっこを追加することで、正規表現を "Chapter 1" または "Section 3" と一致させることができます。
ただし、かっこは部分式の作成にも使用されます。 結果のサブマッチは、プログラムで取得できます。
次の JScript 正規表現では、かっこを使用して "Chapter" と "Section" をグループ化します。 可能性のある一致には、後に数字が続く "Chapter" が含まれます。
/(Chapter|Section) [1-9][0-9]{0,1}/
また、Chapter|Section をかっこで囲むと、2 つの一致する単語が後で使用できるように保存されます。
次の例は、一致とサブマッチをコードでどのように取得できるかを示しています。 この表現では、かっこは 1 組だけであるため、保存されるサブマッチも 1 つだけです。
var re = /(Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50 Section 85"
ShowMatches(src, re);
// Output:
// Chapter 50
// submatch 1: Chapter
// Section 85
// submatch 1: Section
// Perform a search on a string by using a regular expression,
// and display the matches and submatches.
function ShowMatches(src, re)
{
var result;
// Get the first match.
result = re.exec(src);
while (result != null)
{
// Show the entire match.
print();
print(result[0]);
// Show the submatches.
for (var index=1; index<result.length; index++)
{
print("submatch " + index + ": " + result[index]);
}
// Get the next match.
result = re.exec(src);
}
}
保存されたサブマッチのない代替
前の例では、単語の "Chapter" と "Section" をグループ化するためだけにかっこを使用しています。
サブマッチが後で使用するために保存されないようにするには、部分式 (?:パターン) を指定します。 次の例では、前の例と同じことを実行しますが、サブマッチは保存しません。
var re = /(?:Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50 Section 85"
ShowMatches(src, re);
// Output:
// Chapter 50
// Section 85
部分式
正規表現でかっこ () を使用すると、部分式が作成されます。 結果のサブマッチは、プログラムで取得できます。
次の例では、正規表現に 3 つの部分式が含まれます。 サブマッチ文字列は、それぞれの一致と共に表示されます。
var re = /(\w+)@(\w+)\.(\w+)/g
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
// george@contoso.com
// submatch 1: george
// submatch 2: contoso
// submatch 3: com
// someone@example.com
// submatch 1: someone
// submatch 2: example
// submatch 3: com
次の例は、URI (Universal Resource Indicator) をコンポーネントに分割します。
1 番目のかっこの部分式で、Web アドレスのプロトコルの部分を保存します。 コロンと 2 つのスラッシュの前にある単語と一致します。 2 番目のかっこの部分式は、アドレスのドメイン アドレスの部分を保存します。 スラッシュ (/) またはコロン (:) 文字を含まない文字の並びと一致します。 3 番目のかっこの部分式は、Web サイト ポート番号が指定されている場合に、その番号を保存します。 コロンに続く 0 桁以上の数字と一致します。 4 番目のかっこの部分式は、Web アドレスで指定されたパスとページの情報を保存します。 シャープ記号 (#) または空白文字以外の 0 個以上の文字と一致します。
var re = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi;
var src = "https://msdn.microsoft.com:80/scripting/default.htm";
ShowMatches(src, re);
// Output:
// https://msdn.microsoft.com:80/scripting/default.htm
// submatch 1: http
// submatch 2: msdn.microsoft.com
// submatch 3: :80
// submatch 4: /scripting/default.htm
肯定/否定先読み
肯定先読みは、一致の検出後、文字列の次の検索が一致した文字列の前から開始される検索です。 一致した文字列は保存されず、後で使用することはできません。 肯定先読みを指定するには、(?=パターン) という構文を使用します。
次の例では、パスワードの長さが 4 ~ 8 文字で、少なくとも 1 文字の数字が含まれているかどうかを判断するために検索が実行されます。
正規表現では、.*\d は後に数字が続く任意の数の文字を探します。 検索文字列が "abc3qr" の場合、これは "abc3" と一致します。 .{4,8} は、一致したその文字列の後ではなく前から照合を開始し、4 ~ 8 文字の文字列を探します。 これは "abc3qr" と一致します。
^ および $ は、検索される文字列の開始位置と終了位置を指定します。 これにより、検索される文字列に一致した文字の外側の文字が含まれる場合の一致を阻止します。
var re = /^(?=.*\d).{4,8}$/gi
var src = "abc3qr"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
// abc3qr
否定先読みは、否定先読み式のパターンと一致しない検索文字列を検索します。 一致の検出後、文字列の次の検索は、一致した文字列の前から開始されます。 一致した文字列は保存されず、後で使用することはできません。 否定先読みを指定するには、(?!パターン) という構文を使用します。
次の例は、"th" で始まらない単語と一致します。
正規表現では、\b はワード境界と一致します。 検索文字列が " quick " の場合、これは最初の空白と一致します。 (?!th) は "th" 以外の文字列を探します。 これは "qu" と一致します。 \w+ は、一致したその文字列の前から照合を開始し、単語を探します。 これは "quick" と一致します。
var re = /\b(?!th)\w+\b/gi
var src = "The quick brown fox jumps over the lazy dog."
ShowMatches(src, re);
// Output:
// quick
// brown
// fox
// jumps
// over
// lazy
// dog