十分鐘學會正則表示式
1、正則表示式
正則表示式(regular expression)描述了一種字串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
模式:使用一種特殊符號來實現字串的匹配
2、建立正則物件
①隱式建立
var 正則物件 = /正則表示式/匹配模式;
②直接例項化
var 正則物件 = new RegExp(‘正則表示式’, ‘匹配模式’);
兩者之間的功能是完全一致的,都是為了獲得正則物件。但是兩者之間的區別主要在於語法的不同。
3、匹配模式
基本語法:
var reg = /正則表示式/匹配模式;
在正則表示式中,匹配模式常用的有兩種形式:
g :global縮寫,代表全域性匹配,匹配出所有滿足條件的結果
i :ignore縮寫,代表忽略大小寫,匹配時,會自動忽略字串的大小寫
4、與正則表示式相關的幾個方法
① RegExp類下的方法(reg.test或reg.exec)
test(str) :判斷字串中是否具有指定模式的子串,返回結果是一個布林型別的值
exec(str) :返回字串中指定模式的子串,一次只能獲取一個與之匹配的結果
② String類下的方法(str.方法(reg))
search(reg) :與indexOf非常類似,返回指定模式的子串在字串首次出現的位置
match(reg) :以陣列的形式返回指定模式的字串,可以返回所有匹配的結果
replace(reg,’替換後的字元’) :把指定模式的子串進行替換操作
split(reg) :以指定模式分割字串,返回結果為陣列
5.幾個重要概念
1.子表示式:在正則表示式中,通過一對圓括號括起來的內容,我們就稱之為“子表示式”。如:
var reg = /\d(\d)\d/gi;
2.捕獲:在正則表示式中,子表示式匹配到相應的內容時,系統會自動捕獲這個行為,然後將子表示式匹配到的內容放入系統的快取區中。我們把這個過程就稱之為“捕獲”。
3.反向引用:在正則表示式中,我們可以使用\n(n>0,正整數,代表系統中的緩衝區編號)來獲取緩衝區中的內容,我們把這個過程就稱之為“反向引用”。
6.編寫正則表示式三步走
1.匹配符(查什麼)
匹配符:字元匹配符用於匹配某個或某些字元
在正則表示式中,通過一對中括號括起來的內容,我們就稱之為“字元簇”。字元簇代表的是一個範圍,但是匹配時,只能匹配某個固定的結果。
[a-z] :匹配字元a到字元z之間的任一字元
[A-Z] :匹配字元A到字元Z之間的任一字元
[0-9] :匹配數字0到9之間的任一數字
[0-9a-z] :匹配數字0到9或字元a到字元z之間的任一字元
[0-9a-zA-Z] :匹配數字0到9或字元a到字元z或字元A到字元Z之間的任一字元
[abcd] :匹配字元a或字元b或字元c或字元d
[1234] :匹配數字1或數字2或數字3或數字4
在字元簇中,通過一個^脫位元組來表示取反的含義。
[^a-z] :匹配除字元a到字元z以外的任一字元
[^0-9] :匹配除數字0到9以外的任一字元
[^abcd] :匹配除a、b、c、d以外的任一字元
幾個比較特殊的匹配符
\d :匹配一個數字字元,還可以使用[0-9]
\D :匹配一個非數字字元,還可以使用[^0-9]
\w :匹配包括下劃線的任何單詞字元,還可以使用[0-9a-zA-Z_]
\W :匹配任何非單詞字元,還可以使用[^\w]
\s :匹配任何空白字元,space縮寫
\S :匹配任何非空白字元,還可以使用[^\s]
.(我是一個點號) :匹配除 "\n" 之外的任何單個字元
[\u4e00-\u9fa5] :匹配中文字元中的任一字元
2.限定符(查多少)
限定符可以指定正則表示式的一個給定元件必須要出現多少次才能滿足匹配。
* :匹配前面的子表示式零次或多次,0到多,{0,}
+ :匹配前面的子表示式一次或多次,1到多,{1,}
? :匹配前面的子表示式零次或一次,0或1,{0,1}
{n} :匹配確定的 n 次
{n,} :至少匹配n 次
{n,m} :最少匹配 n 次且最多匹配 m 次
特別說明:
貪婪匹配
在正則表示式中,預設情況下,能匹配多的就不匹配少的,我們把這種匹配模式就稱之為“貪婪匹配。所有的正則表示式,預設情況下采用的都是貪婪匹配原則。
非貪婪匹配
在限定符的後面新增一個問號?,那我們的貪婪匹配原則就會轉化為非貪婪匹配原則,優先匹配少的。
3.定位符(從哪查)
定位符可以將一個正則表示式固定在一行的開始或結束。也可以建立只在單詞內或只在單詞的開始或結尾處出現的正則表示式。
^ :匹配輸入字串的開始位置
$ :匹配輸入字串的結束位置
\b :匹配一個單詞邊界
\B :匹配非單詞邊界
7.幾個需要注意的點
1.轉義符
在正則表示式中,我們可以使用反斜槓\對某些特殊字元進行轉義操作。需要轉義的字元:
點號.
小括號()
中括號[]
左斜槓/
右斜槓\
選擇匹配符|
2.選擇匹配符:在正則表示式中,我們可以通過一個豎線|代表選擇匹配符。可以理解成“或”。
3.特殊用法:
(?=) :正向預查;
(?!) :負向預查;
特別說明:在正則表示式中,如果子表示式遇到了exec就會產生上面的結果。其返回結果是一個數組。
第一組元素,索引為0的資料hellophp,代表正則匹配到的結果
索引為1的資料php,代表是第一個子表示式匹配到的結果
第二組元素,索引為0的資料hellojavascript,代表正則表示式匹配到的結果
索引為1的資料javascript,代表是第一個子表示式匹配到的結果
如何解決以上問題呢?答:可以使用(?:)的形式,讓正則表示式中的子表示式只輸出內容,但不捕獲。
(?:):輸出內容但不捕獲(要用到的知識點:子表示式與exec方法)