String.prototype.match()

当一个字符串与一个正则表达式匹配时, match()方法检索匹配项。

语法

str.match(regexp);

参数

regexp
一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp 。如果你未提供任何参数,直接使用 match() ,那么你会得到一个包含空字符串的 Array :[""] 。

返回值

array
一个包含了整个匹配结果以及任何括号捕获的匹配结果的 Array ;如果没有匹配项,则返回 null

描述

如果正则表达式没有 g 标志,则 str.match() 会返回和 RegExp.exec() 相同的结果。而且返回的 Array 拥有一个额外的 input 属性,该属性包含被解析的原始字符串。另外,还拥有一个 index 属性,该属性表示匹配结果在原字符串中的索引(以0开始)。

如果正则表达式包含 g 标志,则该方法返回一个 Array ,它包含所有匹配的子字符串而不是匹配对象。捕获组不会被返回。如果没有匹配到,则返回  null

参看:RegExp 方法

  • 如果你需要知道一个字符串是否匹配一个正则表达式 RegExp ,可使用 search()
  • 如果你只是需要第一个匹配结果,你可能想要使用 RegExp.exec()
  • 如果你想要获得捕获组,并且设置了全局标志,你需要用 RegExp.exec()

示例

例子:使用 match

在下例中,使用 match 查找 "Chapter" 紧跟着 1 个或多个数值字符,再紧跟着一个小数点和数值字符 0 次或多次。正则表达式包含 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);

// logs [ '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' 属性是被解析的原始字符串。

例子:match 使用全局(global)和忽略大小写(ignore case)标志

下例展示了 match 使用 global 和 ignore case 标志。A-E、a-e 的所有字母将会作为一个数组的元素返回。

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

使用match(),不传参数

var str = "Nothing will come of nothing.";

str.match();   // returns [""]

一个非正则表达式对象作为参数

当参数是一个字符串或一个数字,它会使用new RegExp(obj)来隐式转换成一个 RegExp。如果它是一个有正号的正数,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的类型是number。返回["NaN"]
str1.match(Infinity);   // Infinity的类型是number。返回["Infinity"]
str1.match(+Infinity);  // 返回["Infinity"]
str1.match(-Infinity);  // 返回["-Infinity"]
str2.match(65);         // 返回["65"]
str2.match(+65);        // 有正号的number。返回["65"]
str3.match(null);       // 返回["null"]

规范

Specification Status Comment
ECMAScript 3rd Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
String.prototype.match
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
String.prototype.match
Standard  
ECMAScript 2017 Draft (ECMA-262)
String.prototype.match
Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Firefox 特殊注意

  • 从Gecko 27 (Firefox 27 / Thunderbird 27 / SeaMonkey 2.24)开始,此方法遵守ECMAScript 规范。当使用全局正则表达式调用 match()时,RegExp.lastIndex 属性(如果指定)会重置为 0 (bug 501739)。
  • 从 Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36)开始,不赞成使用非标准的标志参数,并抛出一个控制台警告(bug 1142351)。
  • 从 Gecko 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44) 开始 , non-release builds不再支持非标准的标志参数,并且将完全移除(bug 1245801)。
  • 从 Gecko 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46) 开始 , 不再支持非标准的标志参数 (bug 1108382).

相关链接

文档标签和贡献者

 此页面的贡献者: xgqfrms-GitHub, kameii, AlexChao
 最后编辑者: xgqfrms-GitHub,