《極簡JavaScript正則教程》

JavaScript中的正則內容說多其實也很少,但要全面完全掌握,也須要花費一些精力。本文的內容不會詳細全面講解,那會是一個頗爲龐大的工程。會試着從一些重要概念的角度,梳理一下正則中須要掌握的經常使用的知識點。正則表達式

1、正則中的基礎概念

1.1元字符

元字符是正則表達式中具備特殊含義的字符,這些字符沒法用來表明它們本身自己。例如*號在正則中並不表明*號自己,而表示匹配任意字符。常見的正則元字符以下。bash

\w  匹配單詞字符
\W  匹配非單詞字符
\d  匹配數字
\D  匹配非數字
\s  匹配空格
\S  匹配非空格
\b  匹配單詞邊界
\B  匹配非單詞邊界
\n  匹配換行符號
\r  匹配回車
\   正則中用於轉義
^   匹配字符串開頭
$   匹配字符串結尾
複製代碼

1.2字符類

字符類指的是使用元字符'[]'構建的一個匹配範圍。例如: /[abcde]/g;表明的是匹配abcde這些字符中的任意一個。 還有一種是反向字符類,表明的是匹配除了字符類中出現的字符之外的任意字符,例如: /[^abc]/g;表明的是匹配除了abc意外任意的字符。ui

2、正則中的量詞

量詞的功能是在正則表達式中匹配字符重複出現的次數。主要有spa

?   匹配字符出現零次或者一次,最多一次
+   匹配字符出現一次或屢次,至少一次
*   出現任意次,零次或者無數次
{n,m}   匹配出現n次到m次的字符,包括n和m
複製代碼

3、正則中的分組

正則中使用元字符()來進行分組,分組的內容能夠進行捕獲,並在正則中重用。code

let reg = /(\d{4})-\1/g;
複製代碼

例如在上述正則表達式中,括號內匹配4個數字就是一個分組,而這個分組匹配到的內容,能夠在後續的正則表達式中利用,在這個正則中就是'\1',表示等同於第一個分組。 固然有些狀況下,咱們不但願某些分組被捕獲,若是須要某些分組不被捕獲,能夠在分組的開始位置加上'?:'。例如。ip

let reg = /(\d{5})-(?:\d{3})-(\d{1})/g;
複製代碼

上述正則中第二個分組就不會被捕獲,後續正則中'\2'引用分組,表明的是(\d{1})這個分組中捕獲的內容。字符串

4、貪婪模式和非貪婪模式

正則中的量詞默認是貪婪模式,也就是說會盡量多的匹配符合要求的字符。例如string

let str = 'ababababababab';
let reg = /(ab){3,5}/g;
str.replace(reg, 'M');  // Mabab
複製代碼

在能夠匹配3個到5個ab的狀況下,默認的貪婪模式匹配了5個。
在量詞後面加上?可讓正則轉爲非貪婪模式。一樣的例子。class

let str = 'ababababababab';
let reg = /(ab){3,5}?/g;
str.replace(reg, 'M');  // "MMab"
複製代碼

5、正向查找和負向查找

正向斷言指定了一個必須匹配但不在結果中返回的模式。一個向前查找模式其實就是一個以?=開頭的子表達式,須要匹配的文本跟在=的後面。例如。基礎

let str = 'a1bMa2bVa3bKa4bG';
let reg = /(a\db)(?=K)/g;
str.match(reg);     // ["a3b"]
複製代碼

(a\db)咱們知道是一個子項,匹配的是'a數字b'這樣的規則,而子項後面的那個子項就是正向查找,它限定了子項後面的那個位置必須匹配到'K'。符合這個規則的只有'a3b'。

相關文章
相關標籤/搜索