JavaScript--正則表達式

来源:http://www.cnblogs.com/hq0721/archive/2016/10/19/5978875.html
-Advertisement-
Play Games

1. 正則表達式 是一個描述字元模式的對象. 1.創建方式 1) 正則表達式直接量 var pattern = /s$/; 2) RegExp()構造函數 var pattern = new RegExp("s$"); 2. 直接量字元 正則表達式中所有字母和數字都是按照字面含義進行匹配的。 字元 ...


1. 正則表達式
 是一個描述字元模式的對象.
 1.創建方式
  1) 正則表達式直接量
   var pattern = /s$/;
  2) RegExp()構造函數
   var pattern = new RegExp("s$");
 2. 直接量字元
  正則表達式中所有字母和數字都是按照字面含義進行匹配的。
     字元   匹配
  -----------------------
  字母和數字  自身
   \t   製表符
   \n   換行符 
   \v   垂直製表符
   \f   換頁符
   \r   回車符
   \xnn  由十六進位數nn指定的拉丁字元  \x0A => \n
   \uxxxx  由十六進位xxxx指定的Unicode字元,例如 \u0009 => \t
   \cX   控制字元 ^X,例如 \cJ 等價於換頁符 \n
 3. 字元類
  將直接量字元單獨放在方括弧內就組成了字元類。一個字元類可以匹配它所有包含的任意字元。
  [...]  方括弧內的任意字元
  [^...]  不在方括弧內的任意字元
 特殊字元類
  .   除換行符和其他Unicode行終止符之外的任意字元
  \w   任何ASCII字元,等價於[a-zA-Z0-9]
  \W   任何非ASCII字元組成的,等價於[^a-zA-Z0-9]
  \s   任何Unicode空白符:空格,製表符,回車
  \S   任何非Unicode空白符的字元
  \d   任何ASCII數字,等價於 [0-9]
  \D   任何非ASCII數字之外的任意字元,等價於 [^0-9]
  [\b]  退格直接量(特例)

 4. 重覆  一定要用在子表達式之後
  {n,m} 匹配前一項至少n次,但是不超過m次
  {n,} 匹配前一項n次或者更多次
  {n}  匹配前一項n次
  ?  匹配前一項0次或者1次,等價於{0,1}
  +  匹配前一項1次或者多次,等價於{1,}
  *  匹配前一項0次或者多次,等價於{0,}

  例如:
   /[abc]/  匹配"a" "b" "c"中任意一個字元
   /[^abc]/ 匹配"a" "b" "c"之外的任意一個字元
   /\d{2,4}/ 匹配2~4個數字
   /\w{3}\d?/ 匹配三個字元或和一個可選的數字
   /\s+java\s+/ 匹配前後帶有一個或多個空格的字元串"java"

 5. 重覆方式
  貪婪重覆
   匹配重覆字元時是儘可能多地匹配
  非貪婪重覆 
   在待匹配的字元後跟隨一個問號即可: ?? +? *? {1,5}?
  例如:
   /a+/ 可以匹配一個或者多個連續的字母a, 當使用"aaa"作為匹配字元串時正則表達式會匹配它的三個字元
   /a+?/ 可以匹配一個或者多個連續的字母a, 但是儘可能少地匹配。只能匹配第一個a
 6. 選擇
  使用字元 "|" 分割供選擇的字元。選擇項的嘗試匹配次序是從左到右,直到發現了匹配項,如果左邊的選擇項匹配,就忽略右邊的匹配項,即使它產生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"
 7. 分組
  "()"作用:
  1) 把單獨的項組合成子表達式
   以便可以像處理一個單元那樣用"|""*""+""?"對單元內的項進行處理
   /java(script)?/  可以匹配字元串java,後面的script可以有也可以沒有
   /(ab|cd)+|ef/    可以匹配"ef",也可以匹配"ab""cd"一次或者多次
  2) 在完整的模式中定義子模式
   當一個正則表達式成功地和目標字元串相匹配時,可以從目標串中抽出和圓括弧中的子模式相匹配的部分。
   /[a-z]+\d+/  一個或者多個小寫字母後跟隨一個或者多個數字
   (/[a-z]+(\d+)/) 可以抽出每個匹配末尾的數字
  3) 在同一正則表達式後面引用前面的子表達式。
   \1 引用第一個帶圓括弧的子表達式
   /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/    \2 引用 ([Ss]cript)
   對正則表達式中前一個子表達式的引用,並不是指對子表達式模式的引用,而是對與那個模式相匹配的文本的引用
    例如:
    /['"][^'"]*['"]/ 匹配單引號或者雙引號內的0個或者多個字元,但是它並不要求左側和右側的引號匹配
    /(['"])[^'"]*\1/ 匹配單引號或者雙引號內的0個或者多個字元,但是它要求左側和右側的引號匹配

 8. 指定匹配位置
  ^ 匹配字元串的開頭,在多行檢索中,匹配一行的開頭
  $ 匹配字元串的結尾,在多行檢索中,匹配一行的結尾
  \b 匹配一個單詞的邊界,即位於字元\w和\W之間的位置,或者位於字元\w和字元串的開頭或結尾之間的位置。
  \B 匹配非單詞邊界的位置
  (?=p)  零寬正向先行斷言,要求接下來的字元都與p匹配,但不能包括匹配p的那些字元
  (?!p)  零寬負向先行斷言,要求接下來的字元不與p匹配
 9. 修飾符
  不是出現在兩條斜線之間,而是出現在第二條斜線之後。
  new RegExp("","igm")
   i  說明匹配模式匹配是不區分大小寫
   g  說明模式匹配應該是全局的
   m  用以在多行模式中執行匹配。
    /java$/im 可以匹配"java",也可以匹配"java\nis fun"
  
2. Javascript中 String對正則表達式的支持     
 1. search() 
  參數為一個正則表達式。如果參數不為正則表達式,則先通過RegExp將其轉換為構造函數。不支持全局檢索,返回第一個與之匹配的子串的位置,如果找不到匹配的子串,返回-1。
  "JavaScript".search(/script/i); //返回4
 2. replace()
  用以執行檢索和替換操作。第一個參數是正則表達式,第二個參數是要替換的字元串。
  text.replace(/javascript/gi,"JavaScript"); //不區分大小寫將所有javascript轉換為JavaScript
 3. match()  
  最常用的正則表達式方法,參數為正則表達式。返回由匹配結果組成的數組。
  當正則表達式中沒有g修飾符的時候,就不是全局匹配。這時,數組的第一個元素就為匹配的字元串,剩餘的元素則是由正則表達式中用圓括弧括起來的子表達式。如果該正則表達式設置為修飾符g,則該方法返回的數組包含字元串中所有匹配結果。
  "1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]

  var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
  var text = "visit my blog at http://www.briup.com/~ee";
  var result = text.match(url);
  if(result!=null){
   var fullurl = result[0];
   var protocol = result[1];
   var host = result[2];
   var path = result[3];
  }
 4. split() 方法用於把一個字元串分割成字元串數組。

    語法:stringObject.split(separator(必需。字元串或正則表達式,從該參數指定的地方分割 stringObject。),howmany(可選))
      返回值為一個字元串數組    參數可以為正則表達式
      "1, 2, 3, 4, 5".split(/\s*,\s*/); //["1","2","3","4","5"] 允許分隔符左右兩邊留有空白

     "2:3:4:5".split(":") //將返回["2", "3", "4", "5"]
     "|a|b|c".split("|") //將返回["", "a", "b", "c"]

     "hello".split("") //可返回 ["h", "e", "l", "l", "o"]

     "hello".split("", 3) //返回一部分字元,請使用 howmany 參數 返回 ["h", "e", "l"]

3. Javascript中RegExp
 1. 構造函數
  第一個參數包括正則表達式的主體部分,即正則表達式直接量中兩條斜線之間的文本
  第二個參數指定正則表達式的修飾符。只能傳入g ,i,m或者其組合,可以省略
  var zipcode = new RegExp("/\d{5}","g");
 2. 屬性
  source  包含正則表達式文本
  global  布爾值,表明這個正則表達式是否帶有修飾符g
  ignoreCase 布爾值,表明這個正則表達式是否帶有修飾符i
  multiline 布爾值,表明這個正則表達式是否帶有修飾符m
  lastIndex 如果匹配模式帶有g,這個屬性存儲在整個字元串中下一次檢索的開始位置,這個屬性會被exec(), test()方法調用到
 3.方法
  1) exec() 
   與match類似。參數為字元串。對一個指定的字元串執行一個正則表達式在一個字元串中執行匹配檢索,如果沒有找到任何匹配,返回null,如果找到了匹配,返回一個數組。這個數組元素中的第一個元素包含與正則表達式相匹配的子字元串,剩餘的元素是圓括弧內的子表達式相匹配的子串。當調用的正則表達式對象具有修飾符g時,它將把當前正則表達式對象的lastIndex屬性設置為緊挨著匹配子串的字元位置,當同一個正則表達式第二次調用exec()時,它將從lastIndex屬性所指的字元處開始檢索。如果沒有匹配到任何結果將lastIndex重置為0.

   var pattern = /Java/ig;
   var text = "JavaScript is more fun than java_is good";
   var result;
   while((result = pattern.exec(text))!=null){
    console.log(result[0]+" at "+result.index);
   }
  2) test() 
   參數為字元串。用test()對某個字元串進行檢測,如果包含正則表達式的一個匹配結果,返回true.調用test()和調用exec()行為等價,test()會從lastIndex指定位置處開始檢索某個字元串,如果它找到了一個匹配結果,立即設置lastIndex為當前匹配字元串的結束位置。

   var pattern = /Java/ig;
   var text = "JavaScript is more fun than java_is good";
   var pattern.test(text); //結果 true
   與test() exec()不同,String方法search() replace() match()並不會用到lastIndex屬性


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於jQuery的 入門使用jQuery可以很容易或具有挑戰性的,這取決於你如何使用JavaScript,HTML,CSS進行開發和編程。 要知道一件重要的事情是,jQuery是只是一個JavaScript庫。jQuery的所有功能特性都是通過JavaScript訪問,所以要對javascript足 ...
  • angular源碼其實結構非常清晰,劃分的有條有理的,大概就是這樣子: 其實閱讀angular源碼重要的是angular的整個架構思路,至於服務過濾器和指令可以先拋開。 setupModuleLoader方法寫的有點複雜,尤其是直接三層閉包,如果逆著看,容易糊塗,還是順著思路走比較容易。 首先是,我 ...
  • 本系列文章導航 從零開始學習jQuery (三) 管理jQuery包裝集 一.摘要 在使用jQuery選擇器獲取到jQuery包裝集後, 我們需要對其進行操作. 本章首先講解如何動態的創建元素, 接著學習如何管理jQuery包裝集, 比如添加,刪除,切片等. 二.前言 本系列的2,3篇上面列舉了太多 ...
  • 根據網上的身份證的計算公式寫的一個驗證身份證號的js 第一步:將身份證號碼的第1位數字與7相乘;將身份證號碼的第2位數字與9相乘;將身份證號碼的第3位數字與10相乘;將身份證號碼的第4位數字與5相乘;將身份證號碼的第5位數字與8相乘;將身份證號碼的第6位數字與4相乘;將身份證號碼的第7位數字與2相乘 ...
  • mustache 模板,用於構造html頁面內容。在實際工作中,當同一個模板中想要調用不同的函數來渲染畫面,在已經自定義好了的前提下,可以在渲染頁面時對傳入的參數進行手動判斷。【在不好判斷的情況下,我們可以通過改變傳入參數來進行判斷】跟小白我來看看該模板的語法吧。 Mustache 的模板語法很簡單 ...
  • 我們已經掌握了很多實用 Bootstrap 的重要技能。現在,是時候拿出更多的創意來幫助客戶實現他們全方位線上營銷的願望了。此次將帶領大家做一個漂亮的單頁高端營銷網站。 主要任務如下: □ 一個大型介紹性傳送帶圖片展示區,配有自定義的響應式歡迎信息; □ 一個客戶留言區,顯示為帶標題的圖片牆,就像磚 ...
  • <meta name=''> name:有如下6個值:application-name:文檔名或者應用名,整個文檔只能包含一個值。author:文檔作者description:文檔描述generator:生成文檔的程式。keywords:網頁關鍵字,用英文逗號分隔。 <table>標簽的屬性Bord ...
  • 1. Date函數 var now = new Date(); 獲取當前日期對象 now對象->Date.prototype->Object.prototype 將一個字元串轉換為Date對象的寫法: var str = "2012-12-12"; var date = new Date(str); ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...