js正則表達式

正則表達式的基礎知識:


字面量的形式

ECMAscript通過RegExp引用類型來支持正則表達式,使用下面語法就可以創建一個正則表達式:

 var expression = /pattern / flags;
  • 模式(patten):可以是簡單或者複雜的正則表達式,可以包含字符串,限定符,分組,向前查找及反向引用;
  • 標誌(flags): 用來標誌正則表達式的行爲,主要有一下三種標誌:
    g:表示全局模式,即模式將被應用到所有字符串,而不是在發現第一個匹配符時立即停止;
    i:表示不區分大小寫,即在確定匹配項時,忽略patten和字符串的大小寫
    m: 表示多行模式,即在達到一行文本末尾時還會繼續查找下一行中是否存在與模式匹配的項;

例:

 var pattern1 = /at/g;//匹配字符串中所有‘at’的實例
 var pattern2 = /[bc]at/i;//匹配第一個‘bat’,或者‘cat',不區分大小寫
var pattern3 = /.at/gi;//匹配所有以‘at’結尾的三個字符串組合,不區分大小寫

注意啦: 模式中使用元字符時都應該轉義, // () [] {} \ ^ $ | ? * . 等
例子:

  var pattern = /\[bc\]at/i;//匹配第一個"[bc]at",不區分大小寫


使用RegExp構造函數: new RegExp(”patten”,”flags”);

RegExp構造函數也可以創建一個正則表達式,它接收兩個參數,第一個時模式patten,第二個參數可選,是標誌flags;
由於,第一個參數是字符串,所以在有些情況蝦要對字符串進行雙重轉義,所有元字符都應被雙重轉義;一些已經被轉義的字符也是如此,例如,\n(字符\在字符串中被轉義成\,而在正則表達式字符串中就被轉義成\\);
例如:
字面量模式:/[bc]at/ 對應的字符串模式爲:”\ [bc\ ]at “;
字面量模式:/\w\hello\123/對應的字符串模式爲:”\w\\hello\\123”;

例如:

//匹配第一個"bat"或者"cat";
var pattern = new RegExp('[bc]at', 'i');


模式中的特殊字符

  • 字符類:
    \w 匹配任何ASCII單字符[a-zA-z0-9];
    \W 匹配任何ASCII但字符之外的字符;
    \s 匹配任何Unicode空白符
    \S 匹配除任何Unicode空白符之外的字符
    \d 匹配任何數字[0-9]
    \D 匹配除了數字[0-9]的任何字符
    […] 匹配方括號裏的所有字符
    [^…] 匹配非方括號裏的所有字符

  • 重複類
    {n} 匹配前一項n次
    {n,} 匹配前一項至少n次,至多不限
    {n, m} 匹配前一項最少n次,最多m次
    {?} 匹配前一項0次或者1次
    {+} 匹配前一項至少一次
    {*}匹配前一項0次或者多次

  • 定位符

    ^ 匹配字符串的開頭
    $ 匹配字符串的結尾
    \b 匹配一個單詞的邊界

  • 分組:
    (…)將幾個項目組合成一個單元
    (?…)與(…)類似,只是不記憶與該組所匹配的內容




    常用的正則表達式pattern

  • 正則表達式 [^\x00-\xff]能匹配雙字節字符,下面方法用來獲取字符串長度,規則爲:單字節長度爲1、漢字等雙字節長度爲2;

 function getLength(str){
       return str.replace(/[^\x00-\xff]/g, 'aa').length;//把所有非單字節的字符轉換成2個單字符
        }


- 匹配郵箱

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

判斷一個字符串str是否是郵箱格式

function isEmail(str){
   var reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
    if (! reg.test(str)){
    alert("輸入的不是郵箱");
  } else {
     alert("輸入的是郵箱格式");
  }



- 匹配11位手機號碼

  function isPhoneNunmber(str){
 var reg = /\d{11}/;
     if ((str.length != 11) ||  (! reg.test(str))){
        alert("輸入的不是11位號碼");
     } else {
       alert("輸入的是11位號碼");
     }
}
發佈了63 篇原創文章 · 獲贊 36 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章