正則(RegExp)
定義:正確的規則 它是專門來操作(檢:檢查,索:搜索)(模糊范圍的)字符串的一種規則。
簡寫: /規則和字符串(不帶引號的字符串)/ /d/
標准寫法: new RegExp ( // || 帶引號的字符串 , 修飾符 )
第一個參數:可以放字符串或者正則,注意:如果是字符串形式的元字符,記得要轉意。
第二個參數:修飾符
一般是遇到 變量或者參數 的時候,用標准寫法。
轉義符: \
\ 可以帶任意的符號,只不過有些符號是有特殊含義的
元字符:(普通元字符:在正則當中,字面量方式創建的,兩個斜杠中,除了特殊元字符和量詞元字符以外的字符都叫做普通元字符)
特殊元字符:
\n 匹配一個換行符
\r 匹配一個回車符
\f 匹配一個換頁符
\t 匹配一個制表符
\v 匹配一個垂直制表符
\x
…….
\d :匹配0-9之間的任意一個數字
\D :除了0-9之間的任意字符
\w :匹配數字、字母、下划線,中的任意一個字符,[0-9a-zA-Z]
\W :除了數字,字母,下划線以外的任意字符
\b: 匹配一個邊界 ‘box tag’ (文字是沒有邊界的,比如:你好,中文的感嘆號!。)
\B:除了邊界以外的其他字符
\s 匹配任何不可見字符,包括空格、制表符、換頁符等等
\S 匹配任何可見字符
. 點 匹配除“\n”和”\r”之外的任何單個字符。
\num 重復子項: \1就代表重復第一個子項(只重復一次)。如果有第二個()子項,那么\2就代表重復第二個子項,以此類推。
量詞元字符:
{} 量詞的范圍
修飾符:
g: global 全局匹配(找整個字符串)
i: ignoreCase=>忽略大小寫
m: multiline=> 多行匹配 一般是配合\n來使用的
^: 開頭
$: 結尾
[ ] 范圍,任意取其一,范圍是遵循ascll碼走的。例:\w => [0-9a-zA-Z]的范圍
中文的范圍:[ \u4e00 - \u9fa5 ] (記憶:有事100,有酒罰我)
[^] 排除
() 將( 和 ) 之間的表達式定義為“組”(group),並且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用 \1 到\9 的符號來引用。
| 將兩個匹配條件進行邏輯“或”(or)運算。注意:這個元字符不是所有的軟件都支持的。
正則下的方法:
- //.test(字符串) 檢驗
字符串中有沒有正則能匹配到的內容,返回值: true false - //.exec(字符串) 捕獲
方法用於檢索字符串中的正則表達式的匹配。
返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。 - str.match(//) -> 把匹配到的字符放入到數組中,不匹配返回null
- str.replace( " " | / /(要替換誰)," " | callback(替換成什么))
1 //找到字符串中哪個字母出現的次數最多,出現了幾次?
2 let str = 'dnsasudhusadssasdgsjdgddsjsddhaslfdiusadlhsdsfudahsful'; 3 let n = -Infinity; //負無窮大
4 let name = ''; 5 let str2 = str.split('').sort().join(''); 6
7 str2.replace(/([a-z])\1+/g,function($0,$1){ //$0本次匹配的字符,$1,第一個分組
8 if(n < $0.length){ 9 n = $0.length; 10 name = $1; 11 } 12 }); 13 console.log(n,name);
懶惰: 比如讓找一個數字,它只會找一次,絕對不會找多次
貪婪: 有多少找多少(盡可能的去檢索)