JavaScript零基礎入門——(七)當字符串趕上正則表達式

JavaScript零基礎入門——(七)當字符串趕上正則表達式

歡迎你們回到咱們的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)

新博文微信同步推送,還附有講解視頻哦~

也可直接掃描下方二維碼關注。

相關文章
相關標籤/搜索