相信對于許多初學者來說都不是非常的了解js正則表達式,因此學習起來總是有那么一點費勁,那么我們現在就去看看學習js正則表達式的內容,希望通過這些筆記你可以更好的學習js正則表達式。
正則表達式:對字符串中的信息實現查找、替換和提取操作。(不支持注釋和空白,必須寫在一行內)
正則表達式的創建:包含在一對斜杠之間的字符(直接量語法)
例如:
var pattern = /s$/; // 創建一個正則來匹配所有以字母s結尾的字符串,并賦值給pattern
一 、字符類
將直接量字符單獨放進方括號內就組成了字符類。
一個字符類可以匹配它所包含的任意字符。
正則表達式的字符類:
[...]????? 方括號內的任意字符
[^...]??? 不在方括號內的任意字符
.?????????? 除換行符和其他Unicode行終止符之外的任意字符
/w??????? 任何ASCII字符組成的單詞 等價于[a-zA-Z0-9]
/W??????? 任何非ASCII字符組成的單詞 等價于[^a-zA-Z0-9]
/s???????? 任何Unicode空白符
/S??????? 任何非Unicode空白符
/d??????? 任何ASCII數字 等價于[0-9]
/D??????? 任何非ASCII數字 等價于[^0-9]
[/b]????? 退格直接量(特例)
例如:/[a,b,c]/?????? 表示和字母a,b,c中的任意一個都匹配
/[/s/d]/??????? 表示匹配任意空白字符或者數字
二、重復
用以表示指定字符重復的標記
正則表達式的重復字符語法:
{n,m}????? 匹配前一項至少n次,但不超過m次
{n,} ? 匹配前一項n次或者更多次
{n} ?? 匹配前一項n次
? ?? 匹配前一項0次或者1次,也就是前一項是可選的,等價于{0,1}
+ ????? 匹配前一項1次或多次,等價于{1,}
* ?????? 匹配前一項0次或多次,等價于{0,}
例如://d{2,4}/???? 匹配2~4個數字
//w{3}/d/??? 精確匹配3個單詞和一個可選數字
三、選擇、分組和引用
匹配程序:從左到右,如果左邊的匹配項匹配了,就自動忽略右邊的匹配項(即使可以產生更好的匹配)
①???? |??? 用于分隔供選擇的字符
例如: /ab|cd|ef/????? 可以匹配字符串“ab”,"cd"或者“ef”
//d{3}|[a-z]{4}/?????? 匹配3位數字或四個小寫字母
②? ()
作用一:把單獨項合成子表達式
作用二:在完整的模式中定義子模式
當一個正則表達式成功的和目標字符串相匹配時,可以從目標字符串中抽出和圓括號中的子模式相匹配的部分。
例如:
/[a-z]+/d+/ 檢索一個或多個小寫字母后邊跟著一個或多個數字
如果我們關心的是每個尾部的數字,則可以把模式的數字部分放到括號(/[a-z]+(/d)/),這樣就可以從檢索到的匹配中抽取數字了
作用三:允許在同一正則表達式的后部引入前面的子表達式
實現方法:在字符/后加一位或多位數字(這個數字指定了帶圓括號的子表達式在正則表達式中的位置)
例如:/1??? 引用的是第一個帶圓括號的子表達式
注: 位置以參與計數的左括號位置為準;
正則表達式不允許用雙引號括起的內容中有單引號,反之亦然。
總結:
| ??? 選擇,匹配的是該字符左邊的子表達式或右邊的子表達式
(...)????? 組合,將幾個項組合成一個單元
(...?)??? 只組合,把項組合到一個單元,但不記憶與該組相匹配的字符
/n??????? 和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式,組索引是從左到右的左括號數,(?: 這個形式的分組不參與索引編碼
四、指定匹配的位置:
錨 : 指定匹配發生的合法位置
^ 匹配字符串的開頭
$ ? 匹配字符串的結尾
/b 匹配一個單詞的邊界 (位于/w和/W之間的位置)
/B 匹配非單詞邊界的位置
五、修飾符
修飾符是放在//之外的,不會出現在兩條/線之間
i 不區分大小寫
g 全局匹配,找到所有匹配,而不是找到第一個之后就停止
m 多行匹配
六、 用于模式匹配的String對象的方法
方法一: search() 檢索與之匹配的位置
參數:一個正則表達式
返回:第一個與之匹配的子串的起始位置,如果找不到匹配的子串,返回-1
例如:
<script> "javascript".search(/script/i); //返回值為4 </script>
注:① 如果search()的參數不是正則表達式,則會通過RegExp構造函數將他轉換成正則表達式
????? ② search()不支持全局檢索
方法二: replace() 執行檢索與替換操作
參數:第一個-->正則表達式
第二個-->要進行替換的字符串(也可是一個函數,該函數能動態的計算替換字符串)
注:① 支持g,
正則表達式中設置了g:所有與模式匹配的子串都將替換成第二個參數指定的字符串
??? 正則表達式中沒設置g:只替換所匹配的第一個子串
② 如果第一個參數不是正則,而是一個字符串時,replace()將直接搜索這個字符串
例如:將所有不區分大小寫的javascript都替換成大小寫正確的JavaScript
<script> var str = "javascript,javascript,javascript,javaScript"; alert(str.replace(/javascript/gi,"JavaScript")); //JavaScript,JavaScript,JavaScript,JavaScript</script>
方法三 : match()
參數:正則表達式
返回:由匹配結果組成的數組
支持g
實例一:
<script> var math = "1 plus 2 equals 3".match(//d+/g); console.log(math); // ["1", "2", "3"] console.log(typeof math); //object</script>
實例二:
<script> var math = "1 plus 2 equals 3".match(//d/); console.log(math); // ["1", index: 0, input: "1 plus 2 equals 3"] console.log(typeof math); //object</script>
注意:
給字符串的math()傳入一個非全局的正則表達式:
匹配情況:只檢索第一個匹配
返回值:數組
數組第一個元素:所匹配的字符串
數組第二個元素:正則表達式中用圓括號括起來的子表達式,返回的數組有兩個屬性-->index和input
方法四: split()
返回值:數組
分隔符:split()的參數
例如:
<script> var str= "1,2,3,4,5,6,7,8".split(','); console.log(str); //["1", "2", "3", "4", "5", "6", "7", "8"]</script>
參數是正則表達式時(可以指定分隔符,允許兩邊可以留任意多的空白符)
返回:用以調用它的字符串拆分為一個子字符串組成的數組
<script> var str= "1,2,3,4,5,6,7,8".split(//s*,/s*/); //允許兩邊留任意多的空白符 console.log(str); //["1", "2", "3", "4", "5", "6", "7", "8"]</script>
七、RegExp 對象
RegExp()構造函數:
參數:兩個字符串參數
第一個:正則表達式的主體部分(兩個斜杠之間的文本)
第二個:(可選)指定正則表達式的修飾符(g,i,m這三者或這三者的組合)
注意:無論是字符串直接量還是正則表達式都使用/字符作為轉譯字符的前綴
例如:
var zipCode = new RegExp('//d{5}','g'); //全局匹配字符串中的5個數字,注意這里是//而不是/
以上就是為大家整理的學習js正則表達式的筆記內容,包括了理論知識和實例講解,結合實例對js正則表達式進行了學習,感興趣的小伙伴們可以參考一下
新聞熱點
疑難解答