過目不忘 JS 正規表示式

發表於2016-07-14

正規表示式,有木有人像我一樣,學了好幾遍卻還是很懵圈,學的時候老明白了,學完了忘光了。好吧,其實還是練的不夠,所謂溫故而知新,可以為師矣,今天就隨我來複習一下這傲嬌的正規表示式吧。

為啥要有正規表示式呢?其實就是因為計算機笨(這話不是我說的),比如123456@qq.com,我們一看就是郵箱,可是計算機不認識啊,所以我們就要用一些計算機認識的語言,來制定好規則,告訴它符合這個規則的就是個郵箱,這樣計算機就能幫我們找到對應的東西了。所以正則就是用來設定規則,來完成我們需求的一些操作的,比如登入驗證啦,搜尋指定的東西啦等等,說太多都是多餘,直接看正題吧。

定義正則:

   正則的常用方法 

      1  test()  :在字串中查詢符合正則的內容,若查詢到返回true,反之返回false.

        用法:正則.test(字串) 

        例子:判斷是否是數字

 正規表示式中有很多符號,代表著不同的意思,用來讓我們去定義不同的規則,比如上面\D,還有下面的這些:

\s : 空格
\S : 非空格
\d : 數字
\D : 非數字
\w : 字元 ( 字母 ,數字,下劃線_ )
\W : 非字元例子:是否有不是數字的字元

(下面會根據例子,依次講一些常用的字元,最後再作總結。)

 2   search()  :在字串搜尋符合正則的內容,搜尋到就返回出現的位置(從0開始,如果匹配的不只是一個字母,那隻會返回第一個字母的位置), 如果搜尋失敗就返回 -1 

用法:字串.search(正則)

在字串中查詢複合正則的內容。忽略大小寫:i——ignore(正則中預設是區分大小寫的 如果不區分大小寫的話,在正則的最後加標識 i )

例子:在字串中找字母b,且不區分大小寫

3  match()  在字串中搜尋複合規則的內容,搜尋成功就返回內容,格式為陣列,失敗就返回null。
     用法: 字串.match(正則)
     量詞:+ 至少出現一次 匹配不確定的次數(匹配就是搜尋查詢的意思)
    全域性匹配:g——global(正則中預設,只要搜尋到複合規則的內容就會結束搜尋 )
例子:找出指定格式的所有數字,如下找到 123,54,33,879

4 replace() :查詢符合正則的字串,就替換成對應的字串。返回替換後的內容。

    用法: 字串.replace(正則,新的字串/回撥函式)(在回撥函式中,第一個引數指的是每次匹配成功的字元)

     | : 或的意思 。

   例子:敏感詞過濾,比如 我愛北京天安門,天安門上太陽升。——我愛*****,****上太陽升。即北京和天安門變成*號,

一開始我們可能會想到這樣的方法:

要想實現幾個字對應幾個*,我們可以用回撥函式實現:

replace是一個很有用的方法,經常會用到。

正則中的字元

():,小括號,叫做分組符。就相當於數學裡面的括號。如下:

同時,正則中的每一個帶小括號的項,都叫做這個正則的子項。子項在某些時候非常的有用,比如我們來看一個栗子。

例子:讓2013-6-7 變成 2013.6.7

match方法也會返回自己的子項,如下:

補充:exec()方法:和match方法一樣,搜尋符合規則的內容,並返回內容,格式為陣列。

                      用法:正則.exec(字串);

屬性:input(代表要匹配的字串)  

栗子:不是全域性匹配的情況:

全域性匹配:如果是全域性匹配,可以通過while迴圈 找到每次匹配到的字串,以及子項。每次匹配都接著上次的位置開始匹配

[] : 表示某個集合中的任意一個,比如 [abc] 整體代表一個字元 匹配 a b c 中的任意一個,也可以是範圍,[0-9] 範圍必須從小到大 。

[^a] 整體代表一個字元   :^寫在[]裡面的話,就代表排除的意思

例子:匹配HTML標籤 比如<div class=”b”>hahahah </div> 找出標籤<div class=”b”></div>

轉義字元

\s : 空格
\S : 非空格
\d : 數字
\D : 非數字
\w : 字元 ( 字母 ,數字,下劃線_ )
\W : 非字元
.(點)——任意字元
\. : 真正的點
\b : 獨立的部分 ( 起始,結束,空格 )
\B : 非獨立的部分

關於最後兩個來看個栗子:

例子:寫一個用class名獲取節點的函式:

我們之前可能見過這樣的函式:

其實這是存在問題的,比如它如果一個標籤裡面有兩個class,或者存在相同名字的class,比如<div class=”box1 box1″>,<div class=”box1 box2>它就沒辦法獲取到了,我們可以用正則來解決這個問題。

\a 表示重複的某個子項 比如:

\1 重複的第一個子項

\2 重複的第二個子項

例子(面試題中經常問到):找重複項最多的字元個數

split():字串中的方法,把字串轉成陣列。

sort():陣列中的排序方法,按照ACALL碼進行排序。

join():陣列中的方法,把陣列轉換為字串

量詞:代表出現的次數
{n,m}:至少出現n次,最多m次

{n,} :至少n次

* :任意次 相當於{0,}

? :零次或一次 相當於{0,1}

+ :一次或任意次相當於 {1,}

{n}: 正好n次

例子:判斷是不是QQ號

//^ : 放在正則的最開始位置,就代表起始的意思,注意  /[^a] /   和   /^[a]/是不一樣的,前者是排除的意思,後者是代表首位。
//$ : 正則的最後位置 , 就代表結束的意思

例子:去掉前後空格(面試題經常出現)

常用的一些表單校驗

為了方便且不衝突,我們可以用json的格式 建立自己的空間,如下:

相關文章