正则表达式

Posted sun927

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式:计算机理解的规则,强大的字符串匹配工具。简单来说,是一种规则、模式。

正则也是以对象的形式存在,创建正则两种方法:

 

var re=new RegExp(“a”);           //js风格
var re =/ a /;                 // per 风格

 

 

我们先说一下操作字符串的几个属性,以便更好的操作正则:

  1. search:返回提取所在位置,找不到返回-1。
    var str="abcefg";
    alert(str.search("a"));//位置,-1
    alert(str.search("w"));    // 0

     

  2. match:把所有匹配的东西全部找出来。
    var str="123 -/a 11agcccg3411";
    alert(str.match(/d/g)) ;  
    
    //1,2,3,1,1,3,4,1,1

     

  3. replace:替换成想要的东西。      
    var str="abcaa";
    var re=/a/g;
    alert(str.replace(re,"0"));
    
    //0bc00

     

  4. charAt:返回对应的字符。
    var str="abcdef";
    alert(str.charAt(1)); //b 返回1对应的字符    

     

  5. split:字符串切分。
    var str="a-b-5-1";
    var arr=str.split("-");
    alert(arr); //a,b,5,1  可以做字符串切分    

     

  6. substring:返回对应的字符,但不包括结束位置。
    var str="abcdef";
    alert(str.substring(1,5)); // bcde 不包括结束位置 alert(str.substring(1)); //bcdef 一个时,到结束

     

 

下面我们步入正题

 

1.js 大小写敏感

正则忽略大小写:" i "  (ignore)

 var er=new RegExp("a","i");
 //var er=/a/i //或者这种写法
 var str="ABc";
 alert(str.search(er));

//0

 

2.找到全部:"g" (global)

var str="123 -/a 11agcccg3411";
alert(str.match(/d+/g))    
//alert(str.match(/[0-9]+/g)) 也可以

//123,11,3411

 

3.或者: " | "(竖线)

4.元字符(方括号):" [ ] " ;

  1. 任意字符:[abc]:abc 三个其中任选一个即可 。[abc]pc: 符合的——>apc bpc cpc;
  2. 范围:[a-z]  [0-9]
  3. 排除:[^a-z] :除了a-z;      [^0-9]  :除了a-z;     [^a-z0-9]  :除了a-z 0-9;

5.量词:个数

  • {n}   正好出现n次   [1-9]/d{7} ->八位电话号码
  • {n,m}   最少n次,最多m次  [1-9]/d{4,10} ->5 或者 11位 QQ号
  • {n,}   最少n次,最多不限
  • +     ==   {1,}最少1次,若干,
  • ?    ==  {0,1} 可有可无   (0d{2,3}-)?[1-9]d{7}(-d{1,5})?->5 有无区别的固定电话,有无分机号
  • *      ==  {0,} 不建议用

 

6.转义字符:

 

  • "  . "  (点)——任意字符(尽量不要去用)    
    正则有一个贪婪特性,进可能匹配长的字符串

    一个过滤html标签的例子:
    <script>
         window.onload=function(){
             var oTxt1=document.getElementById("txt1");
             var oTxt2=document.getElementById("txt2");
             var Btn=document.getElementById("btn");
             
             Btn.onclick=function(){
                 var re=/<[^<>]+>/g;
                 oTxt2.value=oTxt1.value.replace(re,‘‘)
             };
         }
    </script>
    
    <textarea rows="20" cols="20" id="txt1" "></textarea>
    <input type="button" id="btn" value="过滤">
    <textarea  rows="20" cols="20" id="txt2" "></textarea>

    注意:              / < . +> /  不完善
                             / <[ ^ <> ] + > /  除了 " <> " 以外的任意字符



  • d  数字    [0-9]
  • w  英文、数字、下划线   [a-z 0-9 ]
  • s   空白字符
  • D  除了数字    [^0-9]
  • W  除了 英文、数字、下划线   [^a-z 0-9 ]
  • S   除了空白字符
  • ^   放在正则 行首(不在" [ ] "时  )
  • $    放在正则 行尾(不在" [ ] "时 )
    注意 : 通过正则找”  .  “ 时用 ‘ . ‘;
                 通过正则找” d  “ 时用 ‘ \d ‘;


 

正则 test方法 :判断是否符合正则规则,返回ture和false 。需要注意的是,只要name一部分符合reg的要求就会返回true,这时候就需要用到^$,分别表示行首和行尾;

 

邮箱验证:

    <script>
             window.onload=function(){
                 var oTxt=document.getElementById("txt");                 
                 var oBtn=document.getElementById("btn");
                 
                 oBtn.onclick=function(){
                     var re=/^[email protected][a-z0-9]+.[a-z]+$/i;
                     if(re.test(oTxt.value))
                     {
                         alert("合法邮箱")
                     }
                     else
                     {
                         alert("你写错了")
                     }
                 };
             }
        </script>
    </head>
    
    <body>
        <input type="text" id="txt">
        <input type="button" id="btn" value="验证">
        
    </body>

 

 

 

















以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式