正则表达式 match()

2018-8-5 00:34| 作者: admin| 查看: 2307| 评论: 2|来自: 蚂蚁部落

match方法可在字符串内查找一个或多个与指定正则表达式匹配的子字符串。

方法的返回值是存放着匹配结果的数组,但数组元素并不一定全都是匹配结果,后面会详细介绍。

语法结构:

[JavaScript] 纯文本查看 复制代码
stringObject.match(reg)

参数解析:

(1).stringObject:从中查找子字符串的源字符串。

(2).reg:正则表达式对象或者正则表达式直接量。

更多内容参阅JavaScript创建正则表达式一章节。

浏览器支持:

(1).IE浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).火狐浏览器支持此方法。

(4).谷歌浏览器支持此方法。

(5).opera浏览器支持此方法。

(6).safria浏览器支持此方法。

一.非全局匹配:

所谓非全局匹配,也就是不使用g修饰符,具体参阅正则表达式 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).不具有引用型分组匹配的子字符串,数组元素仅包含匹配的所有子字符串。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
var str="本站url地址是www.softwhy.com"; 
var reg=/why/;
console.log(str.match(reg));

上面代码采用非全局模式,运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/18/214114r79djgh2b7rbbgjp.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

当前JavaScript并不支持groups,先不用去管,分析如下:

(1).数组第0个元素是匹配的子字符串。

(2).index属性值是"why"中"w"在源字符串中的位置。

(3).input属性值是整个源字符串。

[JavaScript] 纯文本查看 复制代码运行代码
var str="本站url地址是www.softwhy.com"; 
var reg=/w(h)y/;
console.log(str.match(reg));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/18/214918b72779lq00ve2ef0.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

分析如下:

(1).数组第0个元素是匹配的子字符串。

(2).数组第一个元素是正则表达式中引用分组所匹配的内容。

(3).index属性值是"why"中"w"在源字符串中的位置。

(4).input属性值是整个源字符串。

[JavaScript] 纯文本查看 复制代码运行代码
var str="本站url地址是www.softwhy.com"; 
var reg=/o/;
console.log(str.match(reg));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/18/215155ea63ez8eeybiac7w.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

尽管源字符串中,有多个"0",但是只能匹配第一个,因为执行的是非全局匹配。

[JavaScript] 纯文本查看 复制代码运行代码
var str="本站url地址是www.softwhy.com"; 
var reg=/o/g;
console.log(str.match(reg));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/18/215444hwnc87fdo1dd8hns.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

匹配结果相对单纯一些,数组中只存储所匹配到的内容。

[JavaScript] 纯文本查看 复制代码运行代码
var str="antzoane"; 
var reg=/a(n)/g;
console.log(str.match(reg));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/11/231117ws05hnwh9zhmg3rp.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

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

4

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (4 人)

发表评论

最新评论

引用 前端小咸鱼 2019-9-27 10:04
赞👍,老哥!不过非全局那里有个笔误吧,应该是“不使用g修饰的正则”
引用 414339997 2019-7-8 14:44
呜呜呜 大爱蚂蚁部落 目录都分得如此细节 到位

查看全部评论(2)

返回顶部