RegExp和String的正则匹配函数

RegExp

RegExpObject.test(string)

返回:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。

描述:全局和非全局匹配结果都一样。

示例:

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /a=1/;
console.log(reg.test(url));    //true

RegExpObject.exec(string)

返回:一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

描述:返回数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个分组相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个分组相匹配的文本,以此类推,若分组是嵌套的,则由外向内。该数组元还有 length 属性、index 属性、input 属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。

示例:

非全局(每次都从头开始匹配)

var url = 'http://www.baidu.com?a=1&b=2&c=3';
	var reg = /([^?&=]+)=([^?&=])*/;
	console.log(reg.exec(url)); 	//["a=1", "a", "1"] 
	//属性groups:undefined; index:21; input:"http://www.baidu.com?a=1&b=2&c=3"; length:3; __proto__:Array(0)
	console.log(reg.exec(url)); 	//同上
	console.log(reg.exec(url)); 	//同上
	console.log(reg.exec(url)); 	//同上
	reg.lastIndex = 0; 	        //将开始匹配位置设为0(非全局条件下一直为0)
	console.log(reg.exec(url)); 	//同上

全局(每次匹配lastIndex会变成匹配项之后的第一个字符的位置,然后继续往后匹配)

var url = 'http://www.baidu.com?a=1&b=2&c=3';
	var reg = /([^?&=]+)=([^?&=])*/;
	console.log(reg.exec(url)); 	//["a=1", "a", "1"] 
	//属性groups:undefined; index:21; input:"http://www.baidu.com?a=1&b=2&c=3"; length:3; __proto__:Array(0)
	console.log(reg.exec(url)); 	//["b=2", "b", "2"],属性index:25,其他同上
	console.log(reg.exec(url)); 	//["c=3", "c", "3"],属性index:29,其他同上
	console.log(reg.exec(url)); 	//null
	reg.lastIndex = 0; 	        //将开始匹配位置设为0(非全局条件下一直为0)
	console.log(reg.exec(url)); 	//["a=1", "a", "1"],属性index:21,其他同上

String

stringObject.match(regexp)

返回:一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

描述:match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。非全局条件下match() 方法只能执行一次匹配,返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放分组匹配的文本。该数组元还有 length 属性、index 属性、input 属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。全局条件下match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串,返回一个数组,存放所有的匹配子串,而且有length属性,没有 index 属性或 input 属性。

示例:

非全局

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/;
var result = url.match(reg);
console.log(result);    //["a=1", "a", "1"]
//属性groups:undefined; index:21; input:"http://www.baidu.com?a=1&b=2&c=3"; length:3; __proto__:Array(0)
console.log(result.index);  //21
console.log(result.input);  //http://www.baidu.com?a=1&b=2&c=3

全局

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
var result = url.match(reg);
console.log(result);    //["a=1", "b=2", "c=3"]
//属性length:3; __proto__:Array(0)
console.log(result.index);  //undefined
console.log(result.input);  //undefined

stringObject.replace(regexp/substr,replacement)

返回:用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的一个新字符串。

描述:字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。全局条件下 replace() 方法将替换所有匹配的子串,非全局条件下,它只替换第一个匹配子串。

示例:

非全局

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/;
var url1 = url.replace(reg,function(a,b,c,d,e){
    console.log(a,b,c,d,e); //a=1 a 1 21 http://www.baidu.com?a=1&b=2&c=3
    return 'ok';
})
console.log(url1);          //http://www.baidu.com?ok&b=2&c=3

全局

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
var url1 = url.replace(reg,function(a,b,c,d,e){
    console.log(a,b,c,d,e); //执行3次,分别输出:a=1 a 1 21 http://www.baidu.com?a=1&b=2&c=3 和 b=2 b 2 25 http://www.baidu.com?a=1&b=2&c=3 和 c=3 c, 3 29 http://www.baidu.com?a=1&b=2&c=3
    return 'ok';
})
console.log(url1);          //http://www.baidu.com?ok&ok&ok

注:replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。replacement 中的 $ 字符具有特定的含义,如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符 替换文本
$1、$2、...、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&与 regexp 相匹配的子串。
$`位于匹配子串左侧的文本。
$'位于匹配子串右侧的文本。
$$直接量符号。(意思就是要替换为 $ 符号的时候,就写两个$)

示例:

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/;    //非全局条件
var url1 = url.replace(reg,"$&")
console.log(url1);                  //http://www.baidu.com?a=1&b=2&c=3
var url1 = url.replace(reg,"$1")
console.log(url1);                  //http://www.baidu.com?a&b=2&c=3
var url1 = url.replace(reg,"$2")
console.log(url1);                  //http://www.baidu.com?1&b=2&c=3
var url1 = url.replace(reg,"$'")
console.log(url1);                  //http://www.baidu.com?&b=2&c=3&b=2&c=3

var reg = /([^?&=]+)=([^?&=])*/g;   //全局条件
var url1 = url.replace(reg,"$&")
console.log(url1);                  //http://www.baidu.com?a=1&b=2&c=3
var url1 = url.replace(reg,"$1")
console.log(url1);                  //http://www.baidu.com?a&b&c
var url1 = url.replace(reg,"$2")
console.log(url1);                  //http://www.baidu.com?1&2&3
var url1 = url.replace(reg,"$'")
console.log(url1);                  //http://www.baidu.com?&b=2&c=3&&c=3&

补充

\b

正则表达式中的\b匹配的是字符串中间的分隔,但并不实际匹配分隔号这个字符。

示例

var s1="aaa bbb";
var s2="aaabbb";
var reg1=/\baaa\b/g;
console.log(reg1.test(s1));		//true
console.log(reg1.test(s2));		//false

var reg2=/aaa\bbbb/g;
var reg3=/aaa\b\sbbb/g;
console.log(reg2.test(s1));		//false,并不会实际匹配空格符,因为一般不会将\b放在中间
console.log(reg3.test(s1));		//true

.*和.*?

表达式 .* 为单个字符匹配任意次,即贪婪匹配。 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配。

示例

var str = '<h1>待处理</h1>';
var reg1= /<.*>/g;
var reg2= /<.*?>/g;
console.log(reg1.exec(str)); 	//[<h1>待处理</h1>]
console.log(reg1.exec(str));	//null
console.log(reg2.exec(str)); 	//[<h1>]
console.log(reg2.exec(str));	//[</h1>]

参考:https://www.cnblogs.com/wshiqtb/p/5631021.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值