阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS string match()

       match() **方法检索返回一个字符串匹配正则表达式的的结果。

      语法

      str.match(regexp)
      

      参数

      regexp

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

      返回值

      • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
      • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。

      附加属性

      如上所述,匹配的结果包含如下所述的附加特性。

      • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)。
      • index: 匹配的结果的开始位置
      • input: 搜索的字符串.

      一个Array,其内容取决于global(g)标志的存在与否,如果未找到匹配则为null

      描述

      如果正则表达式不包含 标志,str.match() 将返回与 RegExp.exec(). 相同的结果。

      参看:RegExp 方法

      • 如果你需要知道一个字符串是否与一个正则表达式匹配 RegExp ,可使用 test()
      • 如果你只是需要第一个匹配结果,你也可以使用 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"]
      

      规范

      SpecificationStatusComment
      ECMAScript 3rd Edition (ECMA-262)StandardInitial definition. Implemented in JavaScript 1.2.
      ECMAScript 5.1 (ECMA-262) String.prototype.matchStandard
      ECMAScript 2015 (6th Edition, ECMA-262)String.prototype.matchStandard
      ECMAScript Latest Draft (ECMA-262)String.prototype.matchDraft

      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).

      相关链接

      目录
      目录