请选择 进入手机版 | 继续访问电脑版
开启辅助访问
帐号登录 |立即注册

JS中String的match方法详解

 
语法
str.match(regexp)

参数
regexp
一个正则表达式对象。如果传递了一个非正则表达式对象,函数会执行new RegExp(obj)将他转换成一个字符串对象。如果没有传递任何参数,函数将返回空字符串数组:[“”]。

返回值
如果有匹配值,String.prototype.match()返回一个数组,这个数组的内容取决于正则表达式参数中是否有g修饰符。如果没有匹配值,返回null。
(1)如果正则表达式中有g修饰符。则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串,所有匹配到的值会按照数组格式被返回,不会返回捕获组。
(2)如果没有g修饰符。match没有匹配到的话,返回的结果数组为null;匹配到的话,数组返回2个元素,第一个元素为正则表达式匹配文本,第二个为匹配到的文本。
groups:如果匹配值中包含捕获组,返回值中将包含捕获组信息的各项值。否则为undefined。
index:匹配值在整个字符串中的索引。
input:整个字符串。
描述
如果String.prototype.match()参数的正则表达式中没有包含g修饰符,str.match()将会和RegExp.prototype.exec()方法返回一样的结果。
如果只想知道一个字符串是否匹配一个正则表达式,使用RegExp.prototype.test()。
如果想使用一个包含g修饰符的正则表达式匹配中获得捕获组,使用RegExp. prototype.exec()。

示例
直接使用String.prototype.match(),其中没有全局标志g。
下面的例子中,String.prototype.match()将会查找一个以”Chapter”开头的,其后跟随一个或多个数字字符,数字字符后跟随另个或多个’.+数字字符’。在下面代码中正则表达式中有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,

// 'see Chapter 3.4.5.1'是整个匹配项值.
// 'Chapter 3.4.5.1' 被捕获组'(chapter \d+(\.\d)*)'捕获.
// '.1' 被最后一个捕获组'(\.\d)捕获'.
// 'index'属性(值22)是第一个匹配字符在整个字符串中的索引位置.
// 'input'是整个字符串.
说明:如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

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

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。
总结:macth()方法的正则表达式不要忘记使用全局标志g。在String.prototype.match()中不传入参数
var str = "Nothing will come of nothing.";
str.match();   // 返回 [""]
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则