您所在的位置:小祥子 » 编程 » JavaScript » 正文

正则表达式的入门学习

时间:2015-04-21 编辑:angus_jiang 来源:本站整理

正则表达式的好处到底在哪里呢,下面我们先进行个了解:
我们用JS中处理字符串的方法,写出取出字符串中数字的函数:

 var str='dgh6a567sdo23ujaloo932';
     function getNumber(obj){
         var arr=[];
         for (var i = 0; i < obj.length; i++) {
             if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
                     arr.push(obj.charAt(i));
                 }
         }
         return arr;
     };
     console.log(getNumber(str));    //["6", "5", "6", "7", "2", "3", "9", "3", "2"]

上面的方法我们取出了字符串中的数字,但是我们不满意,我们需要的是['6','567','23','932']的形式,对函数进行改造:

function getNumber(obj){
        var arr=[];
        var temp='';
        for (var i = 0; i < obj.length; i++) {
            if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
                    temp+=obj.charAt(i);//现将相邻的数字连接起来
                }
                else{ //每当连接的数字断开时,就在这执行
                    if (temp) {
                        arr.push(temp);
                        temp='';
                    }
                };
        }
        if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
                        arr.push(temp);
                        temp='';
                    }
        return arr;
    };

那我们用正则表达式的方式来解决这个函数实现的功能:

function getNumber2(obj){
        var arr=[];
        var re=/\d+/g;
        arr.push(obj.match(re));
        return arr;
    };

完整的看看程序的运行结果吧:

<!DOCTYPE>
<html>
<head>
	<meta charset='utf-8'> 
	<title></title>
</head>
<script type="text/javascript">
window.onload=function(){
	var str='dgh6a567sdo23ujaloo932';
	/*function getNumber(obj){
		var arr=[];
		for (var i = 0; i < obj.length; i++) {
			if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
					arr.push(obj.charAt(i));
				}
		}
		return arr;
	};*/
	function getNumber(obj){
		var arr=[];
		var temp='';
		for (var i = 0; i < obj.length; i++) {
			if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
					temp+=obj.charAt(i);//现将相邻的数字连接起来
				}
				else{ //每当连接的数字断开时,就在这执行
					if (temp) {
						arr.push(temp);
						temp='';
					}
				};
		}
		if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
						arr.push(temp);
						temp='';
					}
		return arr;
	};

	function getNumber2(obj){
		var arr=[];
		var re=/\d+/g;
		arr.push(obj.match(re));
		return arr;
	};



	console.log(getNumber(str));
	console.log(getNumber2(str));	
};
</script>
<body>
</body>
</html>

  


从上面的例子我们可以看出来,正则表达式的方法有着同样的效果,但是代码更加简短,更加高效,这就是正则的好处啊
正则是为了更高效的处理字符串而产生的,和字符串处理方法一样,只是更加高效、简洁(正则只可以处理字符串)

下面我们来系统的学习一下,正则的几个常用的方法:
在这之前说一下正则的写法,正则和其他对象array()、object()、Date()等都一样,都有初始化的方式
var re=/pattern/flages; //pattern这里可以是任何简单督扎的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。
flages:每个正则表达式都可以带一个或多个标志,用来标明正则表达式的行为。
var re=new RegExp(模式,标志); //这样的创建方式也可以的,大家懂得,只是和简写不同的是参数传递有点不一样
先介绍三个匹配模式所支持的3个标志:
1、g:全局模式,该模式被应用于所有字符串,而非第一匹配成功后立刻停止。
2、i:表示不区分大小写模式,表示在匹配时忽略模式与字符串的大小写。
3、m:表示多行模式,即当到达一行文本末尾时还会继续查找下一行中是否存在模式匹配的项。
因此,一个正则表达式就是一个模式和三个标志之间的组合体,不同的组合产生不同的效果。。。

(1)test
含义:正则去匹配字符串,当匹配成功返回true,反之,返回false;
语法:re.test(字符串);
先说点转义字符吧 :
/s空格 /S非空格 /d数字 /D非数字 /w字符(字母、数字、下划线) /W非字符
举个例子:判断一个字符串是否都是数字

<!DOCTYPE>
<html>
<head>
    <meta charset='utf-8'> 
    <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
    var str='dgh6a567sdo23ujaloo932';
    var str2='123456';
    function allNumber(obj){
        var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果
        if (re.test(obj)) {
            alert('不全是数字');
        }
        else{
            alert('全是数字');
        };
    };
    allNumber(str);
    allNumber(str2);

};
</script>
<body>
</body>
</html>

(2)search
含义:正则去匹配字符串,当匹配成功返回匹配成功的位置,反之,返回-1;和字符串处理方法中的indexof()功能一样
语法:字符串.search(re);
注意:正则中默认是区分大小写的,要想让其不区分大小写的就是加标识i;
例子,不区分大小写的去正则匹配字符串中某个字符

<!DOCTYPE>
<html>
<head>
    <meta charset='utf-8'> 
    <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
    var str='dgh6b567sdo23ujaloo932';
    function searchStr(obj){
        var re=/B/i;//定义正则对象匹配b字符,不区分大小写
        alert(obj.search(re));    
    };
    searchStr(str);
};
</script>
<body>
</body>
</html>

(3)match
含义:正则去匹配字符串,当匹配成功返回匹配成功的数组,反之,返回Null
语法:字符串.match(re);
注意:正则中默认是只要是匹配成功就立刻结束返回相应的值,不会继续匹配。若想查找全部就需要加表示g(全局匹配)
例子:匹配字符串中的连续数字并将其存入一个数组中(连续的数字作为数组用的一项)

程序中的“+”是匹配至少出现一次,为什么要这样做呢?
前面我们提过“正则中默认是只要是匹配成功就立刻结束返回相应的值”,那么在字符串中匹配到一个数字时就会结束,将一个数字返回数组,这时候我们需要的是用g来让它匹配每一个元素。
有没有发现连续的数字没有确定的个数,用“+”就可以满足动态的数字个数。

<!DOCTYPE>
<html>
<head>
    <meta charset='utf-8'> 
    <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
    var str='dgh6b567sdo23ujaloo932';
    function searchStr1(obj){
        var re=/\d/;    
        return obj.match(re);
    };
    function searchStr2(obj){
        var re=/\d/g;    
        return obj.match(re);
    };
    function searchStr3(obj){
        var re=/\d\d/g;//全局匹配2位数    
        return obj.match(re);
    };
    function searchStr4(obj){
        var re=/\d+/g;    
        return obj.match(re);
    };
    console.log(searchStr1(str));
    console.log(searchStr2(str));
    console.log(searchStr3(str));
    console.log(searchStr4(str));

};
</script>
<body>
</body>
</html>

(4)replace
含义:正则去匹配字符串,当匹配成功的字符串被新的字符串所替代
语法:字符串.replace(re);
例子:将字符串中的所有的a都替换成b

<!DOCTYPE>
<html>
<head>
    <meta charset='utf-8'> 
    <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
    var str='daah6b5a7sdo23ujaloo932';
    function replaceStr(obj){
        var re=/a/g; //全局匹配a
        return obj.replace(re,'b');
    };
    console.log(replaceStr(str));
};
</script>
<body>
</body>
</html>

暂时写到这里后续跟新。。。