JavaScript match()方法和正则表达式match()

先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组。如果没有找到匹配结果,返回null。语法结构:

1 str.match(searchvalue)
参数解析:
(1).searchvalue:必需,规定方法要检索的字符串。
代码实例:
 let str="antzone"; 
console.log(str.match("n"));
代码运行效果:
["n", index: 1, input: "antzone", groups: undefined]

对上述代码运行结果分析如下:
(1).match方法在有匹配结果的时候返回值是一个数组。
(2).数组第一个元素是match方法首次匹配到的子字符串,"antzone"虽然有多个"n",但是返回的数组只存储首次匹配到的"n",如果match方法的参数是全局匹配的正则,将会存储所有的匹配到的子字符串。
(3).index属性值返回首次匹配到子字符串的位置。
(4).input属性值是原字符串"antzone"。
(5).groups属性当前并不被支持,暂时不做介绍。


let str="antzone"; 
console.log(str.match("zon"));
代码运行效果:
["zon", index: 3, input: "antzone", groups: undefined]

首次匹配到子字符的位置,以子字符串的首字符在原字符串位置为准。
字符串与数组类似,字符位置从0开始计算,也就是第一个字符的位置为0,第二个位置为1,以此类推。

 let str="antzone"; 
console.log(str.match("蚂蚁"));
代码运行效果:

null

如果匹配不到任何内容,方法返回值为null。


正则表达式 match()
match方法可在字符串内查找一个或多个与指定正则表达式匹配的子字符串。
方法的返回值是存放着匹配结果的数组,但数组元素并不一定全都是匹配结果,后面会详细介绍。
语法结构:
1 stringObject.match(reg)
参数解析:
(1).stringObject:从中查找子字符串的源字符串。
(2).reg:正则表达式对象或者正则表达式直接量。

浏览器支持:
(1).IE浏览器支持此方法。
(2).edge浏览器支持此方法。
(3).火狐浏览器支持此方法。
(4).谷歌浏览器支持此方法。
(5).opera浏览器支持此方法。
(6).safria浏览器支持此方法。


一.非全局匹配:
所谓非全局匹配,也就是使用g修饰符
此时,match方法最多只在字符串中成功匹配一次:
(1).如果不存在匹配的子字符串,返回null。
(2).如果存在匹配的子字符串,返回一个数组。
返回的数组解析如下:
首先说明一下,数组元素的索引是从0开始的。
(1).第0个元素是匹配结果。
(2).第1个元素是第一个引用型分组匹配的子字符串。 
(3).第2个元素存放的是第二个引用型分组匹配的子字符串,依次类推。
返回的数组对象同时具有两个属性:
(1).index:返回匹配的子字符串起始字符在stringObject源字符串中的位置。
(2).input:返回stringObject源字符串。


二.全局匹配:
match方法执行全局匹配,获取所有可以匹配的子字符串:
(1).如果不存在匹配的子字符串,返回null。
(2).如果存在匹配的子字符串,返回一个数组。
与非全局匹配的区别:
(1).不具有index和input属性。
(2).不具有引用型分组匹配的子字符串,数组元素仅包含匹配的所有子字符串。


代码实例如下:
var str="本站url地址是www.softwhy.com"; 
var reg=/why/;
console.log(str.match(reg));
上面代码采用非全局模式,运行效果如下:

["why", index: 16, input: "本站url地址是www.softwhy.com", groups: undefined]

当前JavaScript并不支持groups,先不用去管,分析如下:
(1).数组第0个元素是匹配的子字符串。
(2).index属性值是"why"中"w"在源字符串中的位置。
(3).input属性值是整个源字符串。

 var str="本站url地址是www.softwhy.com"; 
var reg=/w(h)y/;
console.log(str.match(reg));
代码运行效果如下:

"why", "h", index: 16, input: "本站url地址是www.softwhy.com", groups: undefined]

分析如下:
(1).数组第0个元素是匹配的子字符串。
(2).数组第一个元素是正则表达式中引用分组所匹配的内容。
(3).index属性值是"why"中"w"在源字符串中的位置。
(4).input属性值是整个源字符串。

var str="本站url地址是www.softwhy.com"; 
var reg=/o/;
console.log(str.match(reg));
代码运行效果如下:

["o", index: 13, input: "本站url地址是www.softwhy.com", groups: undefined]

尽管源字符串中,有多个"0",但是只能匹配第一个,因为执行的是非全局匹配。
var str="本站url地址是www.softwhy.com"; 
var reg=/o/g;
console.log(str.match(reg));
代码运行效果如下:
 ["o", "o"]


匹配结果相对单纯一些,数组中只存储所匹配到的内容。
var str="antzoane"; 
var reg=/a(n)/g;
console.log(str.match(reg));
代码运行效果如下:
 ["an", "an"]


尽管有子表达式,但是返回的数组并不包括子表达式匹配的内容,与非全局匹配不同。

原文地址:https://www.cnblogs.com/ranyonsue/p/10757567.html