JavaScript の正規表現を使用して複数の出現を一致させる
- JavaScript の正規表現
-
RegExp.prototype.exec()
を使用して、JavaScript で複数の出現を正規表現と照合する -
String.prototype.search()
を使用して、JavaScript で複数の出現を正規表現と照合する -
String.prototype.matchAll()
を使用して、JavaScript で複数の出現を正規表現に一致させる
この記事では、JavaScript の正規表現と、JavaScript で複数の出現箇所を照合する方法について学習します。
JavaScript の正規表現
正規表現は、検索パターンを生成する一連の文字です。 テキスト内のデータを検索する際、この検索パターンを使用して、探しているものを伝えることができます。
正規表現は、1 文字のような基本的なものから、パターン全体のような複雑なものまであります。 正規表現を使用して、テキスト検索またはテキスト置換操作を実行できます。
正規表現には、検索能力を大幅に向上させる可能性があります。
RegExp.prototype.exec()
を使用して、JavaScript で複数の出現を正規表現と照合する
exec()
関数は、指定された文字列で一致するものを検索します。
構文:
exec(str)
パラメーター:
str
: 正規表現と照合する必要がある文字列。
戻り値:
- 一致が成功した場合、
exec()
関数は配列を返し、正規表現オブジェクトのlastIndex
プロパティを変更します。 一致したテキストは、返された配列の最初の項目であり、その後に、一致したテキストの括弧で囲まれたキャプチャ グループごとに 1つの項目が続きます。 - 一致が失敗した場合、
exec()
関数はnull
を返し、lastIndex
を0
に変更します。
global
または sticky
フラグが JavaScript RegExp
オブジェクトに設定されている場合、それらはステートフルです。 前のマッチの lastIndex
を保存します。
内部的には、exec()
を使用して、(キャプチャ グループを使用して) テキスト文字列内の複数の一致を繰り返すことができます。
例:
const regex1 = RegExp('hello*', 'g');
const str1 = 'table hello, hello world';
let array1;
while ((array1 = regex1.exec(str1)) !== null) {
console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
}
出力:
"Found hello. Next starts at 11."
"Found hello. Next starts at 18."
この リンク から上記のコード セグメントにアクセスすることもできます。
g
フラグを指定して連続する一致を検索する
正規表現で g
フラグを指定すると、exec()
関数を使用して、正確なテキストで後続の一致を検出することがよくあります。
検索は、正規表現の lastIndex
プロパティによって提供される str
の部分文字列から始まります (test()
は lastIndex
プロパティを進めます)。
別のテキストを探す場合、lastIndex
プロパティはリセットされません。 代わりに、現在の lastIndex.
から検索が開始されます。
例:
let myRe = /ab*/g;
let str = 'abbcdefabh';
let myArray;
while ((myArray = myRe.exec(str)) !== null) {
let msg = 'Found ' + myArray[0] + '. ';
msg += 'Next match starts at ' + myRe.lastIndex;
console.log(msg);
}
出力:
"Found abb. Next match starts at 3"
"Found ab. Next match starts at 9"
この リンク から上記のコード セグメントのデモにアクセスできます。
正規表現リテラルで exec()
を使用する
RegExp
オブジェクトを明示的に作成せずに exec()
を使用することもできます。
例:
let matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);
出力:
"hello world!"
この リンク から上記のコード セグメントのデモにアクセスできます。
String.prototype.search()
を使用して、JavaScript で複数の出現を正規表現と照合する
search()
メソッドは、正規表現とこの String
オブジェクトとの一致の検索を終了します。
構文:
search(regexp)
パラメーター:
regexp
: It is a regular expression object. If a non-RegEx objectregexp
is executed, it is implicitly converted to aRegExp
withnew RegExp(regexp).
戻り値:
- 一致が見つかった場合は、正規表現と指定された文字列の間の最初の一致のインデックスを返します。一致が見つからない場合は
-1
を返します。
例:
const paragraph =
'The swift brown fox leaps over the sluggish dog. Was the dog truly sluggish if it barked??';
const regex = /[^\w\s]/g;
console.log(paragraph.search(regex));
console.log(paragraph[paragraph.search(regex)]);
出力:
43
"."
この リンク から上記のコード セグメントのデモにアクセスできます。
String.prototype.matchAll()
を使用して、JavaScript で複数の出現を正規表現に一致させる
matchAll()
関数は、正規表現に対して文字列に一致するすべての結果の反復子を提供します。 これには、キャプチャ グループが含まれます。
構文:
matchAll(regexp)
パラメーター:
-
regexp
: 正規表現を持つオブジェクトです。非 RegEx オブジェクト
obj
が与えられると、new RegExp(obj).
を使用して暗黙的にRegExp
に変換されます。RegExp
オブジェクトに/g
フラグがない場合、TypeError
が発行されます。
戻り値:
- 一致のイテレータ (再起動可能なイテラブルではない) を返します。
- 各一致は配列です (追加のプロパティ
index
とinput
を持ちます)。 一致配列には、最初の項目として一致したテキストがあり、次に一致したテキストの括弧で囲まれたキャプチャ グループごとに 1つの要素があります。
例 1:
const regexp = /t(e)(st(\d?))/g;
const str = 'test1test2';
const array = [...str.matchAll(regexp)];
console.log(array[0]);
console.log(array[1]);
出力:
["test1", "e", "st1", "1"]
["test2", "e", "st2", "2"]
この リンク から上記のコード セグメントのデモにアクセスできます。
例 2:
function checkMultipleOccurrences(sentence) {
var matchExpression = /(JavaScript?[^\s]+)|(typescript?[^\s]+)/g;
return sentence.match(matchExpression);
}
var sentence =
'This is my first JavaScript Program which is the subset of typescript';
console.log(sentence);
console.log(checkMultipleOccurrences(sentence));
出力:
"This is my first JavaScript Program which is the subset of typescript"
["JavaScript", "typescript"]
この リンク から上記のコード セグメントのデモにアクセスできます。
上記のコードを実行するには、次のコマンドを使用します。
node fileName.js.