js (z字符串對象,正則表達式)

一、.length----獲取字符串長度;javascript

var myString="JavaScript"; console.log(myString.length); //10

二、concat----鏈接字符串生成新的字符串html

var s1="a"; var s2="b"; var s3="c"; console.log(s1.concat(s2,s3)); //abc console.log(s1) //a

三、indexOf(str,fromIndex)----找到匹配項返回索引值,若是沒找到返回-1;
經常使用方法:java

var myString="JavaScript"; console.log(myString.indexOf("v")); //2 console.log(myString.indexOf("Script")); //4 console.log(myString.indexOf("key")); //-1

四、charAt(index)----返回指定索引位置的字符,若索引越界,返回空字符串;正則表達式

myString="JavaScript"; console.log(myString.charAt(1)); //a console.log(myString.charAt(10000000000000000)); //若索引越界,返回空字符串 -- "" console.log(myString.charAt(-1)); //若索引越界,返回空字符串 -- ""
五、substr(fromIndex,length)----從起始索引fromIndex開始截取長度length的字符串,獲取的字符串包含索引值的開始位置的值,若是length長度不指定或者超過可截取的最大長度,則截取到結尾,若是起始索引fromIndex爲負,則從右往左截取,-1表示倒數第一個;
myString="JavaScript";
console.log(myString.substr(1,1));  //a  
console.log(myString.substr(1,2));  //av
console.log(myString.substr(1));  //avaScript(從下標爲一的元素開始查找直到結束)
console.log(myString.substr(1,4000000));  //avaScript
console.log(myString.substr(-1,1));  //t(從myString.length-1處開始查找一個元素) 
console.log(myString.substr(-2,1));  //p (從myString.length-2處開始查找一個元素)
console.log(myString.substr(-6,2));  //Sc (從myString.length-6處開始查找2個元素)
console.log(myString.substr(-6,6));  //Script
 

7.slice()----截取 startIndex處的字符,不包含endIndex處的字符,基本用法和數組的slice用法同樣;api

 
myString="JavaScript";
console.log(myString.slice(1,3))   //av
若是startIndex > endIndex,則執行方法時返回空字符串
若是 start 爲負,將它做爲 length + start處理,此處 length 爲數組的長度;
console.log(myString.slice(-1,3))    //返回空
若是 end 爲負,就將它做爲 length + end 處理,此處 length 爲數組的長度;
console.log(myString.slice(2,-3))   //vaScr
 

8.運用string對象來進行查找數組

 

一、indexOf(str,fromIndex)----找到匹配項返回索引值,若是沒找到返回-1;
經常使用方法:

var myString="JavaScript";
console.log(myString.indexOf("v"));  //2
console.log(myString.indexOf("Script"));  //4
console.log(myString.indexOf("key"));  //-1
2.判斷字符串中是否包含符合正則的敏感詞
            // var i = str.search(/正則/i)  i表示忽略大小寫    在str中找到第一個符合正則表達式要求的關鍵字的位置
            //返回值:找到了返回關鍵詞的下標,若是沒有找到返回-1
            /*var str=prompt("正在輸入消息.....");
            var i = str.search(/(微|w(ei)?)\s*(信|xin|x)/);
            console.log(i==-1?"發送成功":"發現敏感詞,不能發送!");*/
            var str="No zuo no die No can no say";
            var i =str.search(/n/i);
            console.log(i);
        3. 使用正則表達式查詢指定的一類關鍵詞
            //var arr = str.match(/正則/ig)  查找str中全部符合正則表達式要求的關鍵詞,保存在一個數組中返回
                //默認只找第一個,找到全部須要必須加上g
                //返回值:全部銘感次組成數組,沒有找到返回null
            var arr = str.match(/we/gi);
            console.log(String(arr));
            //強調:若是一個api有可能返回null,就必須先作判斷,不等null時在使用

 

九、split()----字符串分割成數組,返回新數組,不影響原字符串;dom

 

 
var s="a,bc,d";
console.log(s.split(","));  //["a", "bc", "d"]
s="a1b1c1d1";
console.log(s.split("1"));  //["a", "b", "c", "d", ""]

10.RegExp 是正則表達式的縮寫。函數

當您檢索某個文本時,可使用一種模式來描述要檢索的內容。RegExp 就是這種模式。性能

簡單的模式能夠是一個單獨的字符。ui

更復雜的模式包括了更多的字符,並可用於解析、格式檢查、替換等等。

您能夠規定字符串中的檢索位置,以及要檢索的字符類型,等等。

11.、建立一個正則表達式節

你可使用如下兩種方法之一構建一個正則表達式:

使用一個正則表達式字面量,其由包含在斜槓之間的模式組成,以下所示:

/*
   /pattern/flags
*/

const regex = /ab+c/;

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

在加載腳本後,正則表達式字面值提供正則表達式的編譯。當正則表達式保持不變時,使用此方法可得到更好的性能。

或者調用RepExp對象的構造函數,以下所示:

/* 
    new RegExp(pattern [, flags])
*/

let regex = new RegExp("ab+c");

let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");

let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");


            正則表達式是嚴格區分大小寫的
            i    加上去之後,讓正則表達式對大小寫不敏感,    不經常使用
            g    全局匹配    找到了之後還會繼續的去找,沒有找到就一直找
            m    執行多行匹配

(1).正則表達式表達式:[](一個方括號表示匹配一個字符)

 

             [abc123]   匹配abc123任意一個字符
             [a-z]      匹配a-z之間的任意字符,能夠表示一個範圍,中間用-鏈接
             [0-9]      匹配1-9之間的任意一個數
             [A-z]      按照ascii編碼來排序的,A-Z a-z的任意字符

 

(2).特殊字符

            \n 查找換行符。
            \f 查找換頁符。
            \r 查找回車符。
            \t 查找製表符。
            \v 查找垂直製表符。

(3).元字符

. 查找單個字符,除了換行和行結束符。 
                . === [^\n\r]
            \w 查找單詞字符。 
                \w === [A-Za-z0-9_]
            \W 查找非單詞字符。 
                \W === [^\w]
            \d 查找數字。 
                \d === [0-9]
            \D 查找非數字字符。 
                \D === [^\d]
            \s 查找空白字符。 
                \s === [\t\n\r\v\f]
            \S 查找非空白字符。 
                \S === [^\s]

(4).修飾類

    \b 匹配單詞邊界。

    \B 匹配非單詞邊界。

            var str = "thIsis boy";
            var reg = /\Bis\B/ig;     //修飾字符不佔文本內容
            console.log(str.match(reg));

  n$ 匹配任何結尾爲 n 的字符串。

  

var str = "abcabc";
                var reg = /abc$/g;
                console.log(str.match(reg));

 


  ^n 匹配任何開頭爲 n 的字符串。

  

var str = "Abcabc";
                var reg = /^abc/ig;
                console.log(str.match(reg));

 

 

 

(5).量詞

            n{X} 匹配包含 X 個 n 的序列的字符串。 
                var str = "aaaaaaaaaaaaaaaabc";
                var reg = /a{5}/g;
                console.log(str.match(reg));{aaaaa,aaaaa,aaaaa,aaaaa}
            n{X,Y} 匹配包含 X 至 Y 個 n 的序列的字符串。
                正則表達式默認的是貪婪模式,按照最多的進行匹配
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /a{1,3}?/g;   //後面加上問好表示非貪婪模式,按照最少的進行匹配
                console.log(str.match(reg));
            n{X,} 匹配包含至少 X 個 n 的序列的字符串。
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /[ab]{1,}/g;    //最少匹配一個 
                console.log(str.match(reg));

            n+ 匹配任何包含至少一個 n 的字符串。 
                +{1,}
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /[ab]+/g;    //最少匹配一個 
                console.log(str.match(reg));
            n* 匹配任何包含零個或多個 n 的字符串。 
                *{0,}
            n? 匹配任何包含零個或一個 n 的字符串。
                ?{0,1}

(6).屬性

global   是否具備標誌 g。
            ignoreCase   是否具備標誌 i。 
            lastIndex 一個整數,標示開始下一次匹配的字符位置 。      遊標,能夠獲取能夠賦值
            multiline 具備標誌 m。
            source  正則表達式的源文本。 
            var str = "abcabcabc";
            var reg = /[A-Z]/im;
            console.log(reg.source)

 

 

 

 

 

12.RegExp對象 

 

//RegExp對象
        //一、what:封裝一條正則表達式,提供了使用正則表達式進行查找和驗證的API
        //2.when  查找關鍵詞的第四種狀況:即查內容,又查位置
                    // 利用正則表達式進行驗證
        //3.how:
            //建立 直接量的建立  已知規則
            var reg=/no/g;//   全部與的/在正則中都要加上\/才能轉義爲/
            console.log(typeof reg);//object  對象
            //動態建立正則
            // var reg1=new RegExp(/正則/,"gi");
            var str = "牀前明月光,一行白鷺上青天,日照香爐生紫煙,飛流直下三千尺";
            var names=['明月','白鷺','飛流','紫煙',"青天"];
            var nameReg = new RegExp(names.join("|"),"g");
            var kws = str.match(nameReg);
            console.log(kws);

 

4.查找關鍵詞:第四種狀況  即知道找位置又找具體內容
        //var arr = reg.exec(帶查找的完整字符串)
            /*
                返回值:本次找到的一個關鍵詞及位置
                    arr[0]:關鍵詞的內容    若是正則中有分組    arr[n]:自動保存在第n個分組匹配的子內容
                    arr[index]:當前關鍵詞位置  -- > arr.index 若是沒有找到返回null
                    每次查找後,都將reg.lastIndex屬性(下一次開始位置)修改成當前index+關鍵詞長度,至關於跳過了當前關鍵詞繼續向後找

 

//5.檢查字符串是是否徹底知足正則表達式的要求!
            //var bool = reg.test(待檢測字符串)
            //只要是驗證,reg中必須前加^ 後加$   要求衝頭到位,都必須完整匹配
            //ex:輸入六位數的密碼  知道輸入域正確爲止(練習)
            var reg=/^\d{6}$/;
            var input=prompt("請輸入六位數字密碼");

            var bool=reg.test(input);
            console.log(bool);

 

例題:API(str.match/replace

//替換:將字符串中全部敏感(符合正則表達式規則)詞替換爲新內容
            //基本替換  str = str.replace(/正則/ig,'替換值');  替換之後返回一個新的字符串
        var str="No zuo no die No can no say";
        // no---bu
        var kwr = str.match(/no/gi);
        var newStr = str.replace(/no/gi,'bu');
        console.log(newStr);
        console.log('共替換'+kwr.length+"處");
        //yes ---***
        var reg=/yes/gi;
        kwr=str.match(reg);
        var unStr=str.replace(reg, "***");
        console.log(unStr);
        console.log(kwr==null?"沒有找到匹配的關鍵詞":"替換"+kwr.length+"處")
    //衍生操做:刪除,將找到的字符串替換成空字符
        str = str.replace(/葡萄/g,"");
        console.log(str)
        //格式化:將原字符串的關鍵詞按照指定格式從新組合
            /*
                step1:用正則將元字符串中的內容分組
                step2:用replace按新格式從新組合各個分組的內容
                ex:"19950415"--->1995年04月15日
                    birth.replace(/(\d{4})(\d{2})(\d{2})/g,"$1年$2月$3日")
                其中$n能夠得到第n個()分組對應的子字符組

 做業2 :對信息進行加密   "520 1314"  "今晚八點,不見不散"
             charCodeAt  String.fromCharCode sub()  slice() substr()
                定義一個函數加密規則:每字符串都轉化爲unicode碼   ---保證每個unicode碼都是五給字符 不夠5個字符的地方用0補上  
                定義一個函數解密:經過unicode碼 轉換爲字符

 

var msg = "今晚8點,老地方不見不散,w84u"
        function encode(msg){
            for(var i=0,code="";i<msg.length;i++){
                //將msg中當前字符轉換爲unicode,拼接到code上
                // code+=msg[i].charCodeAt();
                var u= msg.charCodeAt(i);
                //加密的unicode碼都變成五位數
                /*if(u<100){
                    u="000"+u;
                }else if(u<1000){
                    u="00"+u;
                }*/
                //(u+100000+"").slice(1)
                //52+100000=100052    
                //20170+100000=120170   .slice(1)   =20170
                            //     012345
                code += (u+100000+"").slice(1);
                
            }

            return code;
        }
        var code = encode(msg);
        console.log(code);

        function decode(code){
            //聲明空字符 str
            var str="";
            //
            return str;
        }

        var receive = decode(code);//對加密的信息解密
        console.log(receive);//輸出解密以後的結果

 

做業3:對名字排序:

 

<button onclick="nameSort()">對名字排序</button>
    <ul id="ulNames">
        <li>tom</li>
        <li>rose</li>
        <li>jim</li>
        <li>smith</li>
        <li>jerry</li>
        <li>Ary</li>
        <li>lucy</li>
    </ul>
    <script>
        function nameSort(){
            //獲取ulNames的innerHTML
            var html = document.getElementById("ulNames").innerHTML;
            //刪除html開頭的空字符<li>和結尾的</li>空字符
            html=html.replace(/^\s*<li>|<\/li>\s*$/g,'');
            //將html按</li>空字符<li>切割保存爲names數組中
            var names = html.split(/<\/li>\s*<li>/);
            //將數組中的名字排序
            names.sort();
            //拼接成 html代碼
            html="<li>"+names.join("</li><li>")+"</li>";
            //將拼接好的html寫到ulNames中去
            ulNames.innerHTML=html;
        }
        
        ulNames.innerHTML="<li>"+
                (
                    ulNames.replace(/^\s*<li>|<\/li>\s*$/g,'')
                    .split(/<\/li>\s*<li>/)
                    .sort()
                    .join("</li><li>")
                )
                +"</li>";

 

 做業4:生成隨機數:

 

//隨機六個不重複的數字  範圍在 1~33之間
        function getRond(){
            //定義空數組  nums
            var nums = [];
            //反覆:生成隨機數  只要nums.length<6
            while(nums.length<6){
                //重複生成隨機1~33之間的隨機數
                var r = Math.floor(Math.random()*33+1);
                //判斷r當前的值是否在nums中已經存在了
                for(var i=0;i<nums.length;i++){
                    if(nums[i]==r){//若是當前元素和r相等,退出循環
                        break;
                    }
                }
                if(i==nums.length){//若是nums中不包含r,就將r加入nums數組
                    nums.push(r)
                }
            }
            console.log(nums);

        }

 

 

        }

相關文章
相關標籤/搜索