js正则表达式

正则表达式的定义

方法一:new RegExp(pattern, attributes),

注意var reg = new RegExp('\\sjava\\s','m');模式字符串里面的一些带反斜杠的字符需要转义

方法二:reg = /abc/;

直接量字符


还有一些字符在正则表达式中具有特殊的含义,要匹配它们要进行转义

字符类(character class)

重复

这些是在模式之后跟随,用以指定字符重复的标记

贪婪的匹配和非贪婪的匹配

贪婪模式下的匹配

<span style="font-size:18px;">	var str = 'aaabbb';
	var reg = /a*b/;
	console.log(reg.exec(str));//输出的结果	["aaab", index: 0, input: "aaabbb"]
	
	/*
		下面是reg.exec(str)匹配的过程,从后向前回朔,
	
		console.log(reg.exec(aaabbb));第一次
		console.log(reg.exec(aaabb));第二次
		console.log(reg.exec(aaab));第三次 匹配成功
	*/</span>


典型例子
<span style="font-size:18px;">	
	var str = 'aaabbbab';
	var reg = /a*b/g;	
	for(var i=0;i<4;i++){
		var obj = reg.exec(str);
		console.log(obj);
	}</span>

匹配结果中输出了 两次b,其实就是贪婪匹配,完成第一次匹配后,以第一次匹配的结束点为起始点
继续匹配得到的结果,

非贪婪模式下的匹配

上面典型例题中的费贪婪模式和贪婪模式是一样,非贪婪模式下就是从左往右的方向匹配的,所以结果一样
我们看一下下面的简单例子
	var str = 'aaaa';
	var reg = /a+?/g;	
	for(var i=0;i<4;i++){
	
		var obj = reg.exec(str);
		console.log(obj);
	}


这里把4个a输出来了,容易理解因为它是从左往右挨个字符匹配的,这里的贪婪模式下将只会匹配到一个

'aaaa',因为从右往左第一个就是匹配'aaaa',所以没有继续下去了。

选择,分组,引用

指定匹配的位置

这里并不会真的去匹配一个字符什么的,而是匹配了字符简的位置,

	var str = 'ab';
	var reg = /a(?=b)/g;			
	var obj = str.match(reg);
	console.log(obj);

输出结果为["a"],并不会真正的去匹配一个字符,
而是匹配位置关系,本例中是匹配的a必须后面跟上一个b才行

修饰符


其中i是大小写不区分,英文是ignore case,g是global,m是multiply多的,
多行匹配只有在匹配文本开头^和结束&,并且匹配的字符存在换行符时才能看的到效果
例子:
var str = 'ab\r\nacd';
	var reg = /^a.*/g;			
	var obj = str.match(reg);
	console.log(obj);
只能匹配到一个[" ab"],下面更改模式为/gm
<span style="font-size:18px;">var str = 'ab\r\nacd';
	var reg = /^a.*/gm;			
	var obj = str.match(reg);
	console.log(obj);</span>

输出字符为["ab","acd"],这里在Windows中文条件下的换行是\r\n,
这里用了多行匹配所有的行头是a的字符串都被匹配下来了

String 的match()和RegExp的exec()方法的比较

两个都是返回一个数组对象,其中exec()方法还会在数组对象中增加两个属性,input和index,
而match()方法就是放回一个数组,还有个点就是,当match()执行的正则只还有全局匹配或是
只含有子表达式时,match()方法放回的数组里面都会去执行子匹配或是子表达式的匹配,
当含有两个时,就只执行全局匹配。
例子
	var str = 'abab';
	var reg = /ab/g;			
	var obj = str.match(reg);
	console.log(obj);
	//["ab", "ab"]
	
	var str = 'ab';
	var reg = /a(b)/;			
	var obj = str.match(reg);
	console.log(obj);
	//["ab", "b", index: 0, input: "ab"]
	
	var str = 'ab';
	var reg = /a(b)/g;			
	var obj = str.match(reg);
	console.log(obj);
	//["ab"]

而exec()方法会执行子匹配和全局匹配
	var str = 'abab';
	var reg = /a(b)/g;
	for(var i=0;i<3;i++){
		var obj = reg.exec(str);
		console.log(obj);
	}
exec(输出的数组第一个元素后的元素怎么样都是子匹配的结果。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值