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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...