String.prototype.match()
** String.prototype.match() メソッドは、正規表現によって照合された文字列の結果を返します。**
var paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
var regex = /[A-Z]/g;
var found = paragraph.match(regex);
console.log(found);
// 输出: Array ["T", "I"]
文法
str.match(正規表現)
パラメータ
regexp
正規表現オブジェクト。非正規表現オブジェクトが渡された場合、関数は new RegExp(obj) を実行して文字列オブジェクトに変換します。引数が渡されない場合、関数は空の文字列配列 [""] を返します。
戻り値
一致する値がある場合、 String.prototype.match() は正規表現パラメータに g 修飾子があるかどうかに応じて内容が異なる配列を返します。一致する値がない場合は null を返します。
(1) 正規表現に g 修飾子がある場合。一致したすべての値は配列形式で返され、キャプチャ グループは返されません。
(2) g 修飾子がない場合。最初に一致した値のみが返され、最初に一致した値内のすべてのキャプチャ グループも返されます。この場合、戻り値には次の追加プロパティが含まれます。
- groups: 一致する値にキャプチャ グループが含まれる場合、戻り値にはキャプチャ グループ情報の値が含まれます。それ以外の場合は未定義です。
- Index: 文字列全体内の一致する値のインデックス。
- 入力: 文字列全体。
説明
String.prototype.match() パラメータの正規表現に g 修飾子が含まれていない場合、str.match() は RegExp.prototype.exec() メソッドと同じ結果を返します。
- 文字列が正規表現に一致するかどうかだけを知りたい場合は、RegExp.prototype.test() を使用します。
- g 修飾子を含む正規表現一致でキャプチャ グループを使用する場合は、RegExp.prototype.exec() を使用します。
例
String.prototype.match() を直接使用する
次の例では、String.prototype.match() は、「Chapter」で始まり、その後に 1 つ以上の数字、その後に別の 1 つ以上の「.+数字」が続く文字列を検索します。次のコードでは、正規表現に i 修飾子があるため、正規表現全体で大文字と小文字が区別されません。
var str = 'For more information, see Chapter 3.4.5.1';
var re = /see (chapter \d+(\.\d)*)/i;
var found = str.match(re);
console.log(found);
// 输出 [ 'see Chapter 3.4.5.1', 'Chapter 3.4.5.1', '.1',
// index: 22,
// input: 'For more information, see Chapter 3.4.5.1' ]
// 'see Chapter 3.4.5.1'是整个匹配项值.
// 'Chapter 3.4.5.1' 被捕获组'(chapter \d+(\.\d)*)'捕获.
// '.1' 被最后一个捕获组'(\.\d)捕获'.
// 'index'属性(值22)是第一个匹配字符在整个字符串中的索引位置.
// 'input'是整个字符串.
String.prototype.match() での g 修飾子の使用
次の例では、パラメーターの正規表現に g 修飾子が含まれており、結果は一致したすべての値を返します。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
String.prototype.match() にはパラメータが渡されません
var str = "Nothing will come of nothing.";
str.match(); // 返回 [""]
引数としての非正規表現
パラメータが文字列または数値の場合、関数は new RegExp(obj) を使用して正規表現オブジェクトに変換します。パラメータが「+」記号を含む正の数値である場合、RegExp() 関数は「+」記号を無視します。
var str1 = "NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript.",
str2 = "My grandfather is 65 years old and My grandmother is 63 years old.",
str3 = "The contract was declared null and void.";
str1.match("number"); // "number" 是个字符串,返回["number"]
str1.match(NaN); // NaN 的数据类型是数字,返回 ["NaN"]
str1.match(Infinity); // Infinity 的数据类型是数字,返回 ["Infinity"]
str1.match(+Infinity); // 返回 ["Infinity"]
str1.match(-Infinity); // 返回 ["-Infinity"]
str2.match(65); // 返回 ["65"]
str2.match(+65); // “+”符号将会被忽略,返回 ["65"]
str3.match(null); // 返回 ["null"]