JavaScript之正則表達式簡介

 正則表達式是具有特殊語法的字符串,用來表示指定字符或字符串在另一個字符串中出現的情況。這些模式字符串,有的十分簡單,有的什麼複雜,它們可以實現很多功能,從刪除字符串的空格到驗證信用卡的有效性等等。
  JavaScript對正則表達式的支持是通過ECMAScript中的RegExp類實現的。RegExp對象的構造函數可以帶一個或兩個參數。第一個參數(或只有一個參數)是描述需要進行匹配的模式字符串;如果還有第二個參數,這個參數則指定了額外的處理指令。
  最基本的正則表達式就是普通的字符串。例如,要匹配單詞“cat”,可以這樣定義正則表達式:
  var  reCat=new RegExp(“cat”);
  這個正則表達式只會匹配字符串中出現的第一個單詞“cat”,而且,它是區分大小的。如果要讓這個正則表達式匹配所有出現的“cat”,需要給構造函數添加第二個參數:
  var  reCat=new RegExp(“cat”,”g”);
  在這一行代碼裏,第二個參數“g”是global的縮寫,表示要搜索字符串中出現的全部“cat”,而不是在找到第一個匹配後就停止。如果還要讓模式不區分大小寫,可以給第二個參數添加字符“i”(“i”是case-insensitive中insensitive的縮寫):
  var  reCat=new RegExp(“cat”,”gi”);
  有些正則表達式字面量使用Perl風格的語法:
  var  reCat=/cat/gi;
  正則表達式字面量由一條斜線開始,跟着字符串模式,然後是另一條斜線。如果還要指定額外的處理指令,如“g”和“i”,直接跟在第二個斜線的後面。
  (一)用RegExp對象
  創建一個RegExp對象後,指導它應用到字符串上。RegExp和String的一些方法都可使用。首先用正則表達式要做的是可能是判斷某個字符串是否匹配指定的模式。最簡單的情況,RegExp有個test()方法,如果給定字符串(只有一個參數)匹配這個模式,它就返回true,否則返回false;
  var  sToMatch=”cat”;
  var  reCat=/cat/;
  alert(reCat.test(sToMatch));  //outpus “true”;
  即時模式只在字符串中出現一次,也認爲是一個匹配,test()將返回真。但如果想訪問模式的每一次出現呢?可以使用exec()方法。
  RegExp的exec()方法,有一個字符串參數,返回一個數組。數組中第一個條目是第一個匹配;其他的是反向引用;
  var  sToMatch=”a bat, a Cat , a fAt baT, a fat cat”;
  var  reAt=/at/;
  var  arrMatches=reAt.exec(sToMatch);
  這裏,arrMatches只包含一個條目:第一個”at”的實例(在單詞“bat”中的那個)。但是爲什麼這樣只能返回包含一個條目的數組呢?假設想獲得某個模式所有出現呢?
  String()對象有個match()方法,它會返回一個包含在字符串中所有匹配的數組。這個方法調用string對象,同時傳給它一個RegExp對象;
  var  sToMatch=” a bat, a Cat , a fAt baT, a fat cat”;
  var  reAt=/at/gi;
  var  arrMatches=sToMatch.match(reAt);
 另一個叫做search()的字符串方法的行爲與indexOf()有些類似,但是它使用一個RegExp對象而非僅僅一個子字符串。Search()方法返回在字符串中出現的一個匹配的位置。
  var  sToMatch=” a bat, a Cat , a fAt baT, a fat cat”;
  var  reAt=/at/gi;
  alert(sToMatch.search(reAt));     //outpus “3”;
      (二)擴展的字符串方法
  有兩個字符串的方法,也可以接受正則表達式作爲參數。第一個方法是replace(),它可以用另一個字符串(第二個參數)來替換某個子串(第一個參數)的所有匹配。例如:
  var  sToChange=”The sky is red.”;
  var  reRed=/red/;
  alert(sToChange.replace(reRed,”blue”));   //outpus  “The sky is blue”;
  也可以指定個函數作爲replace()的第二個參數。這個函數可以接受一個參數,即匹配了的文本,並返回應該進行替換的文本。例如:
  var  sToChange=”The sky is red.”;
  var  reRed=/red/;
  var  sResultText=sToChange.replace(reRed,function(sMatch)){
   return “blue”;
  });
  alert(sResultText);  //outputs  “The sky is blue.”
  在函數中的sMatch的值總爲“red”(因爲這是唯一匹配的模式)。“red”的首頁出現被替換爲函數返回值“blue”。函數加上正則表達處理文本替換的功能是十分強大的。
  第二個方法是split(),它可以將字符串分割成一系列並通過一個數組將它們返回,比如:
  var  sColor=”red,blue,yellow,green”;
  var  arrColors=sColor.split(“,”);
  前面的代碼創建一個數組arrColors,數組包含了四個條目,“red”,“blue”,“yellow”和“green”,使用正則表達式來替代逗號字符串也可以實現同樣的功能。
  var  sColor=”red,blue,yellow,green”;
  var  reComma=/\,/;
  var  arrColors=sColor.split(reComma);    //split at each comma

原創文章,轉載請註明: 轉載自http://www.yiiyaa.net/
發佈了6 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章