java学习笔记四:正则表达式

    今天接触了正则表达式,我们在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就可以很好地描述这些规则。换句话说,正则表达式就是记录文本规则的代码。

    现在用一个实例来说明正则表达式的威力.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
    </body>
</html>

    上面是一段很简单的文字,是前阵子的一个热门新闻,如何使用正则表达式将新闻中的三个当事人名字换成他们各自的新浪微博超链接呢?其实,这是一个很简单的事情:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
		   var p=document.getElementById("content");
		   var str=p.innerHTML;
		   var reg1=/王宝强/g,reg2=/马蓉/g,reg3=/宋喆/g;
		   var str1=str.replace(reg1,"<a href='http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1'>王宝强</a>"),
		   str2=str1.replace(reg2,"<a href='http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1'>马蓉</a>"),
		   str3=str2.replace(reg3,"<a href='http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1'>宋喆</a>");
		   p.innerHTML=str3;
       </script>
    </body>
</html>

我用了三个正则表达式,三次字符串替换,就搞定!但是问题来了,用一次正则表达式,一次替换,能否实现同样的方法?可以,如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			var p=document.getElementById("content");
			var str=p.innerHTML;
			//replace方法第二个参数使用函数(function)时,变量名可以随便设置,因为系统会自动将每次的匹配结果代入函数中
			var str1=str.replace(/(王宝强|马蓉|宋喆)/g,function (person) {
				switch(person){
					case "王宝强":
                    return "<a href='http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1'>王宝强</a>";
					break; 
					case "马蓉":
                    return "<a href='http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1'>马蓉</a>";
					break;
					case "宋喆":
                    return "<a href='http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1'>宋喆</a>";
					break;
				}
			});
			p.innerHTML=str1;
       </script>
    </body>
</html>

这样还是不够简便,更简便的方法还有:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			var p=document.getElementById("content");
			var str=p.innerHTML;
			list={
				"王宝强":"http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1",
				"马蓉":"http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1",
				"宋喆":"http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1"
			}
			var newStr=str.replace(/(王宝强|马蓉|宋喆)/g, function (w) {
				return "<a href='"+list[w]+"'>"+w+"</a>";
			});
			p.innerHTML=newStr;
       </script>
    </body>
</html>

将每个人的名字作为list对象的属性,微博地址为其属性值,用list[属性名]来引用属性值,就可以使replace里的函数更简单。每次用js研究出来一套方法的时候,大部分人就会想到将它作为插件行不行?哎,有了:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			list={
				"王宝强":"http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1",
				"马蓉":"http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1",
				"宋喆":"http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1"
			}
			function execReg(list) {
				var p=document.getElementById("content");
				var str=p.innerHTML;
				var regStr="(";
				for(var name in list){
					regStr+=name+"|";
				}
				regStr=regStr.substring(0,regStr.length-1);//去掉最后一个"|"
				regStr+=")";
				var reg=new RegExp(regStr,'g');
				var newStr=str.replace(reg, function (w) {
					return "<a href='"+list[w]+"'>"+w+"</a>";
				});
				p.innerHTML=newStr;
			}
			execReg(list);
       </script>
    </body>
</html>

方法execReg()就可以写在一个插件里面,我们只要在外面定义好p标签的内容,id设为"content",再建一个list对象写上要替换的字和替换的东西,就可以直接引用插件来一键替换,欧了!

转载于:https://my.oschina.net/marina1216/blog/755432

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值