首页 > 代码库 > javaScript之正则

javaScript之正则

  1. ***正则表达式:专门规定字符串中字符串的规律

    何时使用:今后只要规定字符串格式时

    比如:验证字符串格式

              查找:模糊查找

              替换/格式化字符串

              切割字符串

            语法:

                1.最简单的正则:就是关键字原文

                2.备选字符集:规定了*某一位可选字符列表*

                                        必须且只能多选一匹配:语法[备选字符类表]

                        PS:如果备选字符中部分unicode连续,可用 - 省略中间的字符

                            常用省略:一位数组:[0-9] ;一位小写字母:[a-z];

                3.预选备选字符集:

                           \d -->[0-9]

                            \w-->[0-9a-zA-Z]

                            \s-->所有空字符:空格,制表符,换行

                            \大写 -->\小写的反义

                                           \. -->除了换行和回车后的任意字符

                4.量词:规定相邻的前一个字符集出现的次数

                    如何使用:紧跟在一个字符集之后

                        数值数量:{min,max};{min,};{n}:必须n个

                        不确定数量:?可有可无,最多一个

                                             *可有可无,数量不限

                                             +至少1个,多了不限

                5.选择和分组:

                    选择:或|     分组:()

                6.转义:\

                7.匹配指定位置:

                        ^匹配开始位置的xxx,比如:^\s+ 匹配字符串开头的空字符

                        $匹配结束位置的xxx,比如:\s+$  匹配字符串结尾的空字符

                        匹配开头或结尾的空字符:^\s+|\s+$

                        前加^后加$,且中间没有:^xxx$必须和正则完全匹配

                    ***今后 ,做验证:  都要前加^,后加$

                        \b:表示单词边界:比如\bno\b,只找单词no

                8.预读:在正式匹配前,先大概预判整个字符串的规则,多用于排除法

                    比如:密码强度:6-8位数字,必须包含一个大写和一个数字

                              所有字符:4大类:数字,小写字母,大写字母,特殊符号

                                 1.排除:不全由数字,小写字母组成:

                                        结论:可能包含大写字母或特殊符号

                                 (?![0-9a-z]+$)                 

                                  2.排除:不全由大写字母和小写字母组成

                                        结论:可能包含数字和特殊符号

                                    (?![a-zA-Z]+$)

                                  3.只能由字母或数字组成  --排除了特殊符号

                                    最终:^(?![0-9a-z]+$) (?![a-zA-Z]+$) \w{6,8}$

                  9.汉字备选字符集范围:[\u4e00-\u9fa5]{3,5}


2.***js中String支持正则的API:

            reg:正则表达式对象:

                创建正则表达式:var reg=/正则表达式/属性后缀

                    属性后缀:i 忽略大小写!

                                    g全部,全局,查找或替换全部匹配内容

            

        查找:2种

            1.只判断是否包含关键字:不考虑具体内容和个数

                var i=str.search(reg);  --只能判断有没有关键字

                    只能返回第一个找到的关键字的位置;找不到,返回-1

            2.获取所有关键字的内容,而不考虑位置

                var kwords=str.match(reg);

                返回所有关键字的内容,保存在kwords数组中

                ***找不到,返回null,都要先判断不为null,再使用

        

                kwords.length,如果kwords为null,则报错。


                替换或删除子字符串:

                    var newStr=str.replace(reg,"替换字符");

            替换时防止null

var kwords=reply.match(reg);
   if
(kwords){
      
var n=kwords.length;
      
reply=reply.replace(reg,"**");
      
console.log(reply);
 
}else {
   
console.log("没找到")
}

     例:       

/*去掉字符串开头或结尾的空字符*/
function ltrim(){//只去掉开头的空字符
    //定义正则表达式只匹配开头的空字符,保存在reg中
   
var reg=/^\s+/;
   
//替换str中满足reg规则的子字符串为“”。并返回
   
return str.replace(reg,"");
/*return srt.replace(/^\s+/,"")*/
}
function rtrim(){//只去掉结尾的空字符
    //定义正则表达式只匹配开头的空字符,保存在reg中
    //替换str中满足reg规则的子字符串为“”。并返回
   
return srt.replace(/\s+$/,"");
}
function trim(){//同时去掉开头或结尾的字符
//定义正则表达式只匹配开头的空字符,保存在reg中
    //替换str中满足reg规则的子字符串为“”。并返回
   
return srt.replace(/^\s+|\s+$/g,"");
}
   
var str="\t Hello World \t";
   
console.log(ltrim());

     

        格式化字符串:

                    正则表达式中的每个(),都是一个子表达式

                    每个子表达式都会自动获得一个1开始的编号


        分割字符串:

              var subs=str.split(reg[,count]);  字符串一切开得到的是数组

var msg="Tom@补给兵@60%#Mary@医护兵@80%#Johm@特种兵@30%"
function show(){
   
//按#切割msg,将结果保存在riles中
   
var roles=msg.split(/#/);
   
//遍历roles中每个角色字符串
   
for(var i=0;i<roles.length;i++){
       
//再按@切割当前角色字符串,结果保存在arr中
       
var arr=roles[i].split(/@/);
       
//输出:“名  兵种  生命:值”
       
console.log(arr[0]+""+arr[1]+"生命:")
    }
}

3.***RegExp对象:

        何时使用:只要在js中使用正则表达式,都要先创建RegExp对象

        如何创建:2种:

            1.直接量:var reg=/正则表达式/[ig];

                   如何使用:使用固定的正则表达式时

            2.使用new:var reg=new RegExp("正则表达式"[,"ig"]);

                   何时使用:如果正则表达式需要动态拼接

                new RegExp("^\d{6}$")

        正则API:2个

          查找:4种:

            1.查找固定关键字, 仅返回位置。可指定开始位置:

                    var i=str.indesxOf("kword"[,stari]);

                何时使用:关键字确定

                    通过循环,反复获得每个关键字的位置

             2.只判断有没有:var i=str.search(reg);

                    

             3.获取所有关键字的内容:var kwords=str.match(reg);

                    返回值:找到返回值关键字内容的数组

                                  没找到返回null,必须先判断不是null,再使用

            4.即获得每个关键字的内容,又获得每个关键字的位置:

                    var arr=reg.exec(str)

                特点:1.每次只返回一个关键字的内容,存在arr的[0];如果找不到,返回null

                           2.将本次找到的关键的位置保存在arr.index

                           3.自动调整reg.lastindex属性为下次开始的位置

                            

正则:补充

        1.默认贪婪模式:尽量匹配最长的符合条件的字内容

          懒惰模式:只匹配最短的符合条件的字内容

            贪婪 改 懒惰: .*  -->(.*?) 用一个问号阻止贪婪模式继续,只要出现就改成懒惰模式


        2.RegExp.$n:获得本次匹配中第n个子表达式匹配的内容

        3.替换:str=str.replace(reg,替换);

                如果reg中没有g,只替换第一个匹配的


        4.验证:var bool=reg.test(str);

                如果str符合reg的要求,返回true,说明验证通过;否则返回flase,说明验证不通过。


            强调:凡是验证,前加^后加$,如果不加,只要局部匹配,就通过。


        案例:页面中找表单: var form=document.forms["id"|i]

                form是封装了表单所有内容的对象;提供了提交表单的方法

                form.submit();手动提交表单。

                在表单中找元素:var input=form.elements["name"]

                  input是封装了一个input元素所有属性的对象

                  input.value属性,获得用户输入的内容字符串

javaScript之正则