正则表达式

一、什么叫正则?

Regular Expression,在代码中常简写为regex、regexp或RE;

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

目的:

1、给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”),

2、可以通过正则表达式,从字符串中获取我们想要的特定部分。

特点:

1、灵活性、逻辑性和功能性非常强;

2、可以迅速地用极简单的方式达到字符串的复杂控制。

二、书写形式

<script>
var re=//;
var re=new RegExp;
</script>

三、正则表达式常用方法

1、test方法

test:正则去匹配字符串,如果匹配成功就返回true,匹配失败就返回false;

test写法:正则.test(字符串)

<script type="text/javascript">
var phone=$("#phone").val();
var phonereg=/^(\d{3,4}-)\d{7,8}$/;
if(!phonereg.test(phone)){
    alert("请输入正确的电话");
    $("#phone").focus();
    return false;
}
</script>

2、search方法

search:正则去匹配字符串,如果匹配成功就返回匹配成功的位置,匹配失败就返回-1;

search写法:字符串.search(正则)

正则中默认区分大小写

如果不区分大小写,在正则的后面加 i

<script>
var re=/b/i;
var re=new RegExp('b','i');  //i不区分大小写
</script>

3、match方法

match:正则去匹配字符串,如果匹配成功就返回匹配成功的数组,匹配失败就返回null;

match写法:字符串.match(正则)

正则默认:正则匹配成功就会结束,不会继续匹配

如果想要全部匹配 在正则的后面加 g

<script>
var str='hs123howe456seoaji789';
//function fnNum(str){
//	var arr=[];
//	var tmp='';
//	for(var i=0;i<str.length;i++){
//		if(str.charAt(i)<='9' && str.charAt(i)>='0'){
//			tmp+=str.charAt(i);
//		}else{
//			if(tmp){
//				arr.push(tmp);
//				tmp='';
//			}
//		}
//	}
//	if(tmp){
//		arr.push(tmp);
//		tmp='';
//	}
//	return arr;
//}
var re=/\d+/g; //g全局匹配 +量词:至少出现一位
alert(str.match(re));
</script>

4、replace方法

replace:正则去匹配字符串,匹配成功的字符串替换新的字符串

replace写法:字符串.replace(正则,新的字符串)

replace第二个参数:可以是字符串,也可以是一个函数


<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
	<title>Document</title>
	<style>
		textarea{height:100px;}
	</style>
    <script>
    //巴西《里约时报》3日报道称,火情始于当地时间2日晚7时30分许,几乎烧了整整一夜
    window.onload=function(){
        var aT=document.getElementsByTagName('textarea');
        var oBtn=document.getElementById('btn');
        oBtn.onclick=function(){
            var re=/里约时报|火情/g;  // '|'表示或
            aT[1].value=aT[0].value.replace(re,function(str){
             	alert(str);
                var result='';
                for(i=0;i<str.length;i++){
                    result +='*';
                }
                return result;
            }) 
        }
    }
    </script>
</head>
<body>
替换前:<br>
<textarea>
</textarea><br>
替换后:<br>
<textarea>
</textarea>
<input type="submit" value="确定" id="btn">
</body>
</html>

四、匹配子项:小括号的作用(分组或子项)

<script>
var str="2018-9-5";
var re=/(\d+)(-)/;
str.replace(re,function($0,$1,$2){
    //第一个参数:为正则整体;第二个参数:为第一个子项;第三个参数:为第二个子项;
    return $1+".";
    return $0.substring(0,$0.length-1)+'.';
})
</script>
<script>
var str="abd";
var re=/(a)(b)(d)/;
alert(str.match(re));  //[abd,a,b,d] 当match不加 “g” 的时候才能匹配到子项的集合
</script>

五、正则中的字符类

字符类:一组相似的元素 [ ]中括号整体代表一个字符

排除:^ 如果^在[^a]里面的话,就表示排除a

范围:[a-z]、[0-9]、[A-Z]、[a-z0-9A-Z]

转义字符:

.(点)——任意字符

\.真正的点

\s:空格  \d:数字  \w:字符  \b:独立部分

\S:非空格  \D:非数字  \W:非字符  \B:非独立部分

\1:重复的第一个子项

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
	<title>Document</title>
	<style>li{list-style:none;}</style>
	<script type="text/javascript">
		window.onload=function(){
			var aLi=getElementsByClassName(document,"li","box");
			alert(aLi.length);
			for(var i=0;i<aLi.length;i++){
				aLi[i].style.background='red';
			}
			function getElementsByClassName(parent,tagName,className){
				var aEls=parent.getElementsByTagName(tagName);  //获取页面所有的元素
				var arr=[];  //空数组
               // var re=//;  //当需要传参的时候,一定要用全称的写法
                var re=new RegExp('\\b+className+\\b');
				for(var i=0;i<.length;i++){
						if(re.test(aEls[i].className)){   //有重复同样类名的
							arr.push(aEls[i]);
							break;     //执行完之后跳出当前循环
						}
				}
				return arr;
			}
		}
	</script>
</head>
<body>
<ul id="ul1">
	<li>11111</li>
	<li class="box">22222</li>
	<li>33333</li>
	<li class="boxbox2">44444</li>
</ul>
<ul id="ul2">
	<li>11111</li>
	<li class="box">22222</li>
	<li>33333</li>
	<li class="box">44444</li>
</ul>
</body>
</html>
<script>
var str="sssgggdeedfaagggassssss";
var arr=str.split('');
str=arr.sort().join('');
var value='';
var index=0;
var re=/(\w)\1+/g;
str.replace(re,function($0,$1){
    if(index<$0.length){
        index=$0.length;
        value=$1;
    }
})
alert("最多的字符:"+value+";最多的次数:"+index+";");
</script>

六、量词{ }

{4,7}最少出现4次,最多出现7次;

{4,}最少出现4次

{4}刚好出现4次

+:{1,}   \d+或者\d{1,}

?:{0,1}零次或者一次

*:{0,}至少出现0次

^:正则最开始的位置,表示起始位置

$:正则最后的位置,表示结束位置

<script>
//去掉前后空格
var str=" hello ";
alert('('+trim(str)+')');
function trim(){
    re=/^\s+|\s+$/g;
    return str.replace(re,'');
    
}
</script>

七、常用正则

1.验证用户名和密码:("^[a-zA-Z]\w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位;

2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx;

3.验证手机号码:"^1[3|4|5|7|8][0-9]{9}$";

4.验证身份证号(15位):"\d{14}[[0-9],0-9xX]",(18位):"\d{17}[[0-9],0-9xX]";[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x

5.验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");/^\w+@[a-z0-9]+(\.[a-z]+){1,3}/$

6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$");

7.整数或者小数:^[0-9]+([.][0-9]+){0,1}$

8.只能输入数字:"^[0-9]*$"。

9.只能输入n位的数字:"^\d{n}$"。

10.只能输入至少n位的数字:"^\d{n,}$"。

11.只能输入m~n位的数字:"^\d{m,n}$"。

12.只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

13.只能输入有两位小数的正实数:"^[0-9]+(\.[0-9]{2})?$"。

14.只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。

15.只能输入非零的正整数:"^\+?[1-9][0-9]*$"。

16.只能输入非零的负整数:"^\-[1-9][0-9]*$"。

17.只能输入长度为3的字符:"^.{3}$"。

18.只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。

19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。

20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。

21.验证是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。

22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。

23.验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 [a-zA-Z]+://[^\s]*

24.验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"10"~"12"。

25.验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。

26.获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?

27.匹配双字节字符(包括汉字在内):[^\x00-\xff])

28.匹配空白行的正则表达式:\n\s*\r

29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />

30.匹配首尾空白字符的正则表达式:^\s*|\s*$,/^\s+|\s+$/g

31.匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*

32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

33.匹配腾讯QQ号:[1-9][0-9]{4,}或者/^[1-9]\d{4,11}$/

34.匹配中国邮政编码:[1-9]\\d{5}(?!\d)

35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]。

36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值