歡迎你們回到咱們的JavaScript零基礎入門,上一節課,咱們學習了幾種經常使用的字符串處理的方法,但上節課咱們也說了,原生的字符串處理方法要有正則表達式的加持,才能發揮更大的威力。那麼這節課,咱們來學習一下正則表達式。javascript
仍是那個好習慣,什麼是正則表達式?正則表達式,實際上是舶來語,英文叫Regular Expression,簡寫爲RegExp。其實從英文上能夠看出來,直譯叫規則表達式(臺灣地區就是這麼叫的),它是一種規則,用來規範或限制字符串的格式或內容,它是一種強大的字符串匹配工具,不過,也是一種正常人很難讀懂的文字。java
在JS中,正則表達式有兩種寫法,一種是JS風格,一種是Perl風格,前者經過建立RegExp對象來實現,後者則是直接經過Perl語法來簡寫,咱們來看一下代碼:正則表達式
//正則表達式 //JS風格 // new RegExp(expression[,option]) var re1 = new RegExp('a'); var re2 = new RegExp('a','i'); //Perl風格 // /expression/[option] var re3 = /a/; var re4 = /a/i;
既然是表達式,那就有他特定的表達方法,通常來講,最經常使用的是[],方括號裏邊能夠寫取值範圍,當字符串知足方括號中其中一個條件便可,同時,咱們也能夠藉助正則對象的test方法來驗證,不過須要注意的是,test只要有部分符合要求,就會返回true。咱們來看一下代碼:express
var re = /[abc]/; var str = 'access'; console.log(re.test(str));//true re = /[0-9]/; str = 'No1'; console.log(re.test(str));//true re = /[0-9a-z]/; str = 'No1'; console.log(re.test(str));//true
其實咱們常常有一種需求,那就是排除部分不知足條件的,有點像咱們曾經說過的取反,那要怎麼實現呢?你能想獲得,正則表達式的開發者也能想獲得,在方括號中,加入^就可能取得條件的補集了,咱們來看一下代碼:數組
var re = /[^a-z]/; var str = 'access'; console.log(re.test(str));//false re = /[^0-9]/; str = '123'; console.log(re.test(str));//false re = /[^0-9a-z]/; str = 'No1'; console.log(re.test(str));//true
有人會問,最後一個爲何是true而不是false呢?其實緣由很簡單,由於咱們寫的是a-z,但字符串中包含了大寫字母N,因此是true。那麼問題來了,我要忽略大小寫怎麼辦?固然你能夠在寫一個A-Z,有同窗嫌麻煩,沒事,還記得上邊咱們說過,正則表達式是有option的嗎?咱們好像尚未用過呢,別急,咱們來說一講。微信
option,主要是用來做爲輔助條件,簡單來講,助攻一把。經常使用的option呢,其實只有兩個,一個是i,一個是g。i,就是ignore的縮寫,表示忽略大小寫;g是global的縮寫,表示全局匹配。全局匹配咱們下面再說,咱們來先來了解一下ignore,看代碼:工具
var re = /[^a-z]/i; var str = 'Access'; console.log(re.test(str));//false re = /[^0-9a-z]/i; str = 'No1'; console.log(re.test(str));//false
這時候又有同窗會說了,老師,每次老寫這麼長的表達式,好麻煩。不慌,正則表達式支持簡寫。正則表達式的簡寫,主要是藉助轉義字符,咱們來認識一下:學習
轉義字符 | 釋義 |
---|---|
.(點) | 任意字符 |
\d | 任意數字,等價於{0-9] |
\w | 任意英文、數字或下劃線,等價於{a-z0-9_] |
\s | 空白字符,如空格、tab等 |
\D | 非數字,等價於[^0-9] |
\W | 除了英文、數字或下劃線,等價於{^a-z0-9_] |
\S | 非空字符 |
有些心細的同窗可能會說,老師,若是我想輸入3個數字兩個字母要怎麼辦?沒事,正則表達式提供了量詞。什麼是正則表達式的量詞?它是用來描述匹配出現的次數,經常使用的量詞有哪些呢?咱們來看一下:spa
表達式 | 釋義 |
---|---|
{n} | 正好n次 |
{n,} | 至少n次 |
{n,m} | 最少n次,最多m次 |
* | 任意次,至關於{0,} |
+ | 一次或更多,至關於[1,} |
? | 零次或一次,至關於{0,1} |
說了這麼多,有同窗說,老師,看不出對字符串處理髮揮什麼做用?好吧,那咱們就來講一說。code
首先,咱們上節課說過,search能夠返回指定字符出現的位置,可是咱們想要的多是判斷有無包含字母或數字之類的,但字母又區分大小寫,該怎麼辦?來看代碼:
var str = 'aBc'; console.log(str.search(/a/));//0 console.log(str.search(/b/));//-1 console.log(str.search(/b/i));//1
上一節課咱們還講過replace能夠替換找到第一次的文本,可是若是我想批量替換怎麼辦?繼續看代碼:
var str = 'aBcaacc'; str=str.replace(/a/,'h'); console.log(str);//hBcaacc str=str.replace(/c/g,'z'); console.log(str);//hBzaazz
好,這節課咱們的主要內容已經講完了,更多好玩的例子請觀看公衆號的視頻。不過,看歸看,仍是要本身敲一敲的哈。好了,下一節課,咱們接着講JavaScript的數組。
若是想跟着振丹繼續學習,能夠微信關注【振丹敲代碼】(微信號:JandenCoding)
新博文微信同步推送,還附有講解視頻哦~
也可直接掃描下方二維碼關注。