正則表達式

1,對字符串的操做:查找字符串中的全部數字字符串
function findnumber(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);
    }
    alert(arr);
}至關於正則表達式的:alert(str.match(/\d+/g));
2,正則表達式:所有遍歷字符串規則
正則表達式主要應用在字符串的篩選和匹配某種語法規則的字符串;
var re=/ /i->不區分大小寫   / /g->全局查找
var re= new RegExp("字符串","i 或者 g");
3,元字符
1,$ 放在最後表示匹配最後一個字符,
2,[ .....],表示選擇方括號中的東西,有或有多個都可匹配;
3,[ ^....] 表示不包括方括號之間的東西;
 
4, .  表示除了換行符和其餘Unicode碼終止符以外的任意字符;  而真正的.在正則表達式爲 \. 
5,\w 任何ASCII碼組成的單詞,等價於[a-zA-Z0-9];
6, \W 任何非ASCII碼組成的字符,等價於[ ^a-zA-Z0-9];
7,\s 任何Unicode空白符, 空格
8,\S 任何 非Unicode空白符的字符,注意\w和\s不同;
9,\d 任何ASCII數字,等價於[0-9];
10, \D 任何非ASCII數字,等價於[^ 0-9];
11,\b :獨立的部分(起始,結束,空格)
12,\B:非獨立的部分
例如:
var str2="one and two";
alert(/\bone/g.test(str2)); //true 
\b指的是一個獨立字符,指的能夠是起始位置,也能夠是結束位置,最重要的是的空格
例題:具體使用在getelementByclassname(字符串)的修復bug裏
 
11,{n, m} 表示重複,匹配前一項至少n次至多m次;
12,{n,  } 表示n次或更屢次;
13,{n} 表示重複n次;
 
14,? 匹配前一項0或1次,等價 { 0,1};
15,+ 匹配前一項1 或屢次,等價{1,}
16,* 匹配前一項 0次 或屢次,等價於{0,}
例題:判斷是否是扣扣號
var pattern=/^[1-9]\d{4,11}$/
^寫在正則的最前面的時候表明着起始位置,$寫在正則的最後邊的時候代碼末尾位置
 
17,分組符 |   / a+ | b+ | c+/   能夠匹配到多個a或者多個b多個c;
 
3,正則表達式的五個方法:
1,REx.test(string):正則匹配字符串,匹配成功返回true,匹配失敗返回false;
var str = "as12dadasda234asdas897";
var pattren=/asff/i;
alert(pattren.test(str)); //false
2,string.search(Rexg)方法,匹配字符串,若是匹配成功就返回成功的位置,若是匹配失敗的話就返回-1;
var str = "as12dadasda234asdas897";
console.log(str.search(/\d/i));  //2
正則默認是區分大小寫的
3,string.match()方法:匹配字符串,成功就返回一個數組,若是失敗就返回null
alert(str.match(/\d+/g)); // +號指的是出現一次或者屢次,
正則默認:正則匹配成功就就結束了,不會繼續,若是想所有查找:/ /g
4,string.replace(正則,新的字符串):
var str = "as12dadasda234asdas897";
str=str.replace(/\d+/g,"王瑞睿");  //str的賦值
console.log(str);
replace方法的第二個參數能夠是一個函數 ,也能夠是一個字符串
var word="王瑞睿是個大帥比王瑞瑞睿是個大帥比王瑞王睿是個大帥比";
var patt1=/王瑞睿|王瑞瑞睿|王瑞王睿/g;
var newword=word.replace(patt1,function(str){
    //str函數的第一個參數,就是匹配成功的字符
    var result='';
    alert(str.length);
    for(var i=0;i<str.length;i++){
        result+="*";
    }
    return result;
})
console.log(newword);  //***是個大帥比****是個大帥比****是個大帥比
4,正則的匹配子項,首先使用()來實現分組,將每個正則都分紅一個個的小組,
把匹配到的字符串看做是一個母親的話,每個被括號括起來的都是一個個的子項,因此有時在操做整個字符串不方便的時候就直接操做子字符串
例如:
var Str='1031-1-1';
var patt=/(\d+)(-)/g
var newstrl=Str.replace(patt,function($1,$2,$3){
    //console.log($2);
    //console.log($3);
  return $2+".";
})
相同的,match()方法也具備相同的匹配子項,可是match的正則式不能寫g
var Str='1031-';
alert(Str.match(/(\d+)(-)/)) //1031- 1031 -
 
var str2="abc";
alert(str2.match(/(a)(b)(c)/)); //abc a b c
5,正則表達式的字符類:一組類似的元素 []
[ .....],表示選擇方括號中的東西,有或有多個都可匹配;
[ ^....] 表示不包括方括號之間的東西;
1,
var theword="sqw";
var patt3=/s[weq]w/g
console.log(patt3.test(theword)); //ture
console.log(/s[wer]w/g.test(theword)) //false
console.log(/s[^weq]w/g.test(theword)) //false  排除
字符類的範圍 -:[a-z0-9A-Z]
var theword2="sqw";
console.log(/s[a-z]w/g.test(theword))// true
console.log(/s[a-c]w/g.test(theword))  //false
例題:過濾標籤
逆向思惟:
var pattern=/<[^>]+>/g 就匹配到了全部的html標籤
第一:先保證<>之間的內容不爲空,第二:直接忽略了<>內容的多少
6,當正則須要傳參的時候,必定要使用全稱初始化(var re= new RegExp("字符串","i 或者 g"); )
function getelementByclassname(classname){
var patt=new Rexg("\\d"+classname+"\\d");
         //在\d前面加\的緣由是由於js不能正常的輸出特殊字符,在前面加\進行解析
}
7,重複子項 \n(n is a index)
var str3="abca";
var patt4=/(a)(b)(c)\1/g //在正則表達式中,空格都具備意義,因此要求你的輸入必定要規範
alert(patt4.test(str3));
在正則表達式中,全部使用()括起來的子項都被賦予了一個索引值,使用這個索引值就能夠直接訪問每個子項,因此在上邊的代碼中的 \1 指的就是(a);而且要求每 一個 索引子項的值與初始子項要相同
例如:
var re=/\w\w/g; ->c9(ture) cc(true)
var Re=/(\w)\1/;->c9(false) cc(true)
常常會用到正則的地方:匹配與正則表達式前邊同樣的東西
例題:
var tstr="sssafgdfsdsssasdvcbvbcb";
    var arr=tstr.split('');
    arr=arr.sort().join('');
     var tpatt=/(\w)\1+/g;
     var themax=0;
     var thevalue;
     arr.replace(tpatt,function($1,$2){  //匹配子項的應用
         if($1.length>themax){
             themax=$1.length;
             thevalue=$2;
         }
         
     })
     alert(thevalue+":"+themax);  //s:8
8,在實際應用中,咱們都直接把正則用一個json對象包裹,使用的時候,極其方便
var Json = {
                "中文":/\u4e00-\u9fa5/,
                "email":/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
                "telnum":/\d{3}-\d{8}|\d{4}-\d{7}/,
                "qq":/[1-9][0-9]{4,}/,
                "ip":/\d+\.\d+\.\d+\.\d+/,
            }
alert(Json.email.test("986778566@qq.com"));
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息