js深入了解——正则表达式——下

RegExp对象的实例方法

lastIndex:是pattern.lastIndex,匹配到的位置的下一个位置;之所有在null之后多匹配一次出现匹配结果是由于出现null值之后,lastIndex的值清0

<script>
//如果不加g进行非全局匹配时,无论console匹配多少遍,匹配到的都是第一个
		str = "js js js";
		pattern = /js/g;
//如果此时进行全局匹配,而且次数是4,返回的结果为:
//['js'](index:0),['js'](index:3),['js'](index:6),null
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
//但是如果多加一次匹配,结果就有意思了
//此时返回的结果为['js'](index:0),['js'](index:3),['js'](index:6),null,['js'](index:0)
		//console.log(pattern.exec(str));
</script>
<script>
		//返回的值是3组['js','j'](index:0),['js','j'](index:0),['js','j'](index:0)
		str = "js js js";
		pattern = /(j)s/;
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
</script>

<script>
//如果在上面的基础上加了全局匹配
		//返回的值是3组['js','j'](index:0),['js','j'](index:3),['js','j'](index:6)
		str = "js js js";
		pattern = /(j)s/g;
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
		console.log(pattern.exec(str));
</script>

//对于上述的一次只找得到一个,那么如何将所有的值一次性返回呢

```css
<script>
		var str = '1.js 2.js 3.js';
		var pattern = /js/g;
		var total = 0,
			match = '',
			result;
		while((result = pattern .exec(str)) != null){
			total++;
			match+= '第' + total + '个匹配到的是:' + result[0] + ';' + '它的位置是:' + result.index + '\n';
		}
		match += '共找到'  + total + '处匹配\n';
		//弹出的结果是
		//第1个匹配到的是:js;它的位置是:2
		//第2个匹配到的是:js;它的位置是:7
		//第3个匹配到的是:js;它的位置是:12
		//共找到3处匹配
		console.log(match);
</script>
<script>
		var pattern = new RegExp('a\\nb');
		//toString()的意思是将其转换成字符,转换的是转义之后的
		//输出结果是/a\nb/
		console.log(pattern.toString());
		//输出的是本地特色语言
		console.log(pattern.toLocaleString());
		//pattern.valueOf()返回的是正则它本身;
		//source返回的是里面字面量的值,这里返回的是 a\nb
		console.log(pattern.source);
		//input 返回的是str里面的字符串,也可用$代替
</script>
<script>
		var str = 'js js js';
		var pattern = /js/;
		pattern.exec(str);
		//注意input返回的是str里面的值,也可以用 $_ 代替
		//只有当其进行了匹配,传入input时才有值返回 
		//console.log(RegExp.input);
		console.log(RegExp.$_);
		//这是上述的另一种写法
		console.log(RegExp['$_']);
		//lastMatch是最新一次匹配到的值,这里的是js
		console.log(RegExp.lastMatch);
		//他也有简写
		console.log(['$&']);
		//leftContent是匹配之后剩余的字符,由于是第一个开始匹配的,所以左边剩余的为null
		//右边剩余的rightContent;是js js
		console.log(RegExp.leftContext);
		//他的简写是console.log(['$`']);
		console.log(RegExp.rightContext);
		//他的简写是console.log(['`$']);
		//之前获取数组的方法是\1\2;而函数直接获取的方法是$1
		console.log(RegExp.$1);
	</script>

string对象中与正则相关的方法之 search , match ,和split;

 <script>
		var str = 'html js';
		//输出的结果是5,也可以var pattern了之后直接用pattern找
		//如果找不到返回的是-1,全局匹配不影响其值
		console.log(str.search('js'));
</script>
<script>
		var str = 'js js js';
		var pattern = /js/g;
		//返回值是 ["js", "js", "js"]
		console.log(str.match(pattern));
		//match:非全局的情况下才会返回分组中匹配到的内容,全局的情况下会返回所有匹配到的字符
		//而exec 无论是否全局匹配,返回到的值都是返回当前匹配到的内容,而不是全部
</script>
<script>
		//m只有当其有尾匹配时才能体现出其作用
		var str = '1.js\n2.js\n3.js\n';
		var pattern = /js$/mg;
		//如果没有m会默认的当做一行,而在尾匹配和全局匹配的作用下,只会匹配到一个js
		console.log(str);
		//返回的值是 ["js", "js", "js"]
		console.log(str.match(pattern));
</script>
	<script>
		//当时普通的字符串方法时
		//var str = 'html,css,js';
		//console.log(str.split(','));

		//当用正则的方法时
		var str = 'html   ,css  ,js';
		var pattern = /\s*,\s*/g;
		console.log(str.split(pattern));
	</script>

强大的replace

<script>
		//当用普通的方法替换时
		//var str = 'I love js js';
		//console.log(str.replace('js','html'));

		//当使用正则的方法时
		var str = 'I love js js';
		var pattern = /js/g;
		//输出的结果是 I love html html
		console.log(str.replace(pattern,'html'));
</script>

当进一步更强大的不仅替换了而且样式也给其修改

<script>		
		var str = 'I love js js';
		var pattern = /(js)/g;	
		document.write(str.replace(pattern,'<strong style = "color:red">$1</strong>'))	
</script>
<script>		
		//敏感词过滤
		var str = '中guojun队和abian一起banzheng';
		var pattern = /guojun|abian|banzheng/g;
		//有几个敏感字符就用几个*来代替
		//$0是匹配到的内容,guojun,abian和banzheng
		//返回值是:中**队和**一起**
		console.log(str.replace(pattern,function($0){
			var result = '';
			for(var i = 0 ;i < $0.length;i++){
				result += '*';
			}
			return result;
		}))
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值