前言: 正則表達是就是用特殊字元組成的有一定規則的邏輯公式(規則字元串),主要用於對字元串進行過濾操作。 正則表達式的三個功能: 1.快速匹配指定的字元串; 2.替換遵照正則表達式規則的字元串; 3.在目標字元串中篩選指定的子字元串; 正則表達式的語法: 正則表達式是由普通字元(例如:a-z)和元字 ...
前言:
正則表達是就是用特殊字元組成的有一定規則的邏輯公式(規則字元串),主要用於對字元串進行過濾操作。
正則表達式的三個功能: 1.快速匹配指定的字元串; 2.替換遵照正則表達式規則的字元串; 3.在目標字元串中篩選指定的子字元串; 正則表達式的語法: 正則表達式是由普通字元(例如:a-z)和元字元(特殊字元)組成的文字模式,正則表達式作為一個模板(規則字元串,將目標字元串與所搜索的字元串進行匹配) 一.創建正則表達式對象 RegExp: regular expression 正則表達式對象的創建類似於數組對象的創建 構建正則表達式對象時使用的構造函數有兩個參數: 1.待匹配的字元串模板 2.是匹配的模式,其中三種模式,這三種模式可以組合使用 i:不區分大小寫 g:全局查找,整個目標字元串範圍內 m:多行查找 (1)var reg = new RegExp(‘abc’); (2)reg = new RegExp('abc', 'g’); (3)var regExp = /abc/gi;(正則表達式的簡寫形式,字面量形式雙斜杠中包含的就是要被匹配的文字,雙斜杠後面就是模式組合,//定界,裡面的是規則字元串 ) 二.語法詳解 1.修飾符
<script type="text/javascript"> var str = 'Love me'; var reg = /love/g; console.log(reg.test(str)); // 控制台輸出:false </script>
<script type="text/javascript"> var str = 'Love me'; var reg = /love/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
註:這裡的test方法是正則表達式的一個方法,主要作用是用規則字元串去檢索目標字元串,匹配成功則返回ture否則返回false。對於本文的字元串的匹配成功與否本文都將採用此方法。 註:在理解正則表達式的的匹配方式的時候可以這樣理解;首先要將目標字元和規定字元看做是一個一個的字元,然後在目標字元串中檢索規則字元的第一個l這個字元,如果檢索匹配成功,接下來去檢所規則字元串中的o是否能和目標字元串上一次匹配 成功的下一個字元匹配成功,成功則繼續匹配,否則匹配失敗,執行相關操作。
2.元字元
對於這個看後面的描述就大致可以知道意思,在此不做解釋。
3.量詞
量詞:量詞規定了匹配成功至少需要的次數下限,以及嘗試匹配的次數上限,即量詞前字元或者字元數組重覆必須滿足的次數下限,及嘗試(深刻理解嘗試這個概念)重覆的上限;在理解量詞的時候要學會等價的概念。 先對這些量詞進行解釋:+,*,?,{x},{x,y},^,$ (1)+ +表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組(字元組概念下麵會進行闡述),至少目標字元串中有一個該字元或字元組; 等價於{1,} 例子:<script type="text/javascript"> var str = '211211111'; var reg = /1+/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
(2)* *表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組,匹配儘可能多的次數,一次也沒匹配成功也無所謂; 等價於{0,} 例子:
<script type="text/javascript"> var str = '211211111'; var reg = /1*/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
<script type="text/javascript"> var str = '211211111'; var reg = /3*/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>(3)? ?表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組,至少匹配0次,嘗試匹配1次,即使匹配1次失敗也無所謂; 等價於{0,1} 例子:
<script type="text/javascript"> var str = '211211111'; var reg = /1?/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
<script type="text/javascript"> var str = '211211111'; var reg = /3?/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>(4){x} {x}表示在目標字元串中檢索匹配正則表達式中{x}前的字元或者字元組,必須在目標字元串中找到重覆x次的該量詞前的字元,否則就算匹配失敗; 例子:
<script type="text/javascript"> var str = '211211111'; var reg = /1{7}/gi; console.log(reg.test(str)); // 控制台輸出:false </script>(5){x,y} {x,y}表示在目標字元串中檢索匹配正則表達式中{x}前的字元或者字元組,必須在目標字元串中找到量詞前重覆x次的字元,如果匹配成功,在此基礎之上儘可能去嘗試找到重覆次數為y的字元組成的字元串,如果未匹配到重覆次數y次的字元組成的字元串也沒關係,退而求其次找到重覆y-1次的也可,如果仍未找到,那麼繼續減少重覆次數,但是前提條件是,必須重覆x次,因此x是限制能否匹配成功的必須條件 例子:
<script type="text/javascript"> var str = '211211111'; var reg = /1{3,12}/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
註:這裡的12改成更大的數也依舊會返回true
<script type="text/javascript"> var str = '211211111'; var reg = /1{7,12}/gi; console.log(reg.test(str)); // 控制台輸出:false </script>(6)^ ^表示的就是匹配必須以該量詞之後的字元開頭的目標字元 對於^love 可以這樣理解: 匹配的是以l作為一行的第一個字元,緊跟一個o,緊跟一個v,緊跟一個e的文本
<script type="text/javascript"> var str = 'love me'; var reg = /^love/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>
(7)$
$表示的就是匹配必須以該量詞之前的字元結尾的目標字元
<script type="text/javascript"> var str = 'love me'; var reg = /me$/gi; console.log(reg.test(str)); // 控制台輸出:ture </script>$^他們匹配的是一個位置,而不是具體的文本,
註:本文表格截屏自W3C的正則表達式的表格。
對於選擇,分組等語法在下一部分會詳細介紹,以上內容純屬個人總結理解。