JavaScriptのStringのmatchメソッドを詳しく解説

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"]

おすすめ

転載: blog.csdn.net/yuhk231/article/details/88191846