JavaScript 正則表達式語法

来源:http://www.cnblogs.com/neusc/archive/2016/08/19/5779160.html
-Advertisement-
Play Games

定義 JavaScript定義正則表達式有兩種方法。 1.RegExp構造函數 它接收兩個參數:一個是要匹配的字元串模式,另一個是可選的標誌字元串。 2.字面量 正則表達式的匹配模式支持三種標誌字元串: g:global,全局搜索模式,該模式將被應用於所有字元串,而並非搜索到第一個匹配項就停止搜索; ...


定義

  JavaScript定義正則表達式有兩種方法。

1.RegExp構造函數

var pattern = new RegExp("[bc]at","i");

  它接收兩個參數:一個是要匹配的字元串模式,另一個是可選的標誌字元串。

2.字面量

var pattern = /[bc]at/i;

  正則表達式的匹配模式支持三種標誌字元串:

  • g:global,全局搜索模式,該模式將被應用於所有字元串,而並非搜索到第一個匹配項就停止搜索;
  • i:ingore case,忽略字母大小寫,即在確定匹配項時忽略模式和字元串大小寫;
  • m:multiple lines,多行模式,即在搜索到達一行文本末尾時會繼續查找下一行是否有匹配項。

  這兩種創建正則表達式方法的不同之處在於,正則表達式字面量始終會共用同一個RegExp實例,而使用構造函數創建的每一個新RegExp實例都是新實例。

元字元

  元字元是擁有特殊意義的字元,正則表達式的元字元主要有:

  ( [ { \ ^ $ | ) ? * + .  

  在不同的組合中元字元有其不同的意義。

預定義特殊字元

  

字元類

  簡單類

  一般情況下正則表達式一個字元對應字元串一個字元,但我們可以使用[]來構建一個簡單的類,來表示符合某一特征的一類字元。例如:

  

  [abc]可以匹配方括弧中的a、b、c或其任意組合的字元。

  反向類

  既然[]可以構建一個類,那麼自然就會聯想到與之對應的不包含括弧中內容的類,這個類叫做反向類,例如[^abc]就可以匹配不是a或b或c的字元。

  

  範圍類

  有時候一個一個字元匹配太麻煩而且匹配的類型也相同,此時我們可以使用"-"連接線來表示某個閉區間之間的內容,例如匹配所有小寫字母可以使用[a-z],如下:

  

  匹配所有的0到9簡直的任意數字可以使用[0-9]表示:

  

  預定義類

  對於如上我們創建的幾個類,正則表達式為我們提供了幾個常用的預定義類來匹配常見的字元,如下:

字元   等價類   含義
.   [^\n\r] 匹配除了回車符和換行符之外的所有字元
\d [0-9] 數字字元
\D [^0-9] 非數字字元
\s [\t\n\x0B\f\r] 空白字元
\S   [^\t\n\x0B\f\r] 非空白字元
\w [a-zA-Z_0-9] 單詞字元(字母、數字和下劃線)
\W [^a-zA-Z_0-9] 非單詞字元

 

 

 

 

 

 

 

 

量詞

  上面的方法匹配字元都是一對一匹配的,如果某個字元連續出現多次按照上面的方法匹配會非常麻煩,因此我們想有沒有其它方法可以直接匹配多次重覆出現的字元。正則表達式為我們提供了一些量詞,如下:

字元   含義  
? 出現零次或一次(最多一次)
+ 出現一次或多次(至少一次)
* 出現零次或多次(任意次)
{n} 出現n次
{n,m} 出現n到m次
{n,} 至少出現n次

 

 

 

 

 

 

 

 

  貪婪模式與非貪婪模式

  對於{n,m}這種匹配方式,到底是匹配n個還是匹配m個呢?這就涉及到匹配模式的問題。預設情況下,量詞是儘可能多的匹配字元,也就是所謂的貪婪模式,例如:

var num = '123456789';
num.match(/\d{2,4}/g);   //[1234]、[5678]、[9]

  與貪婪模式對於的是非貪婪模式,只需要在量詞之後加"?"即可,例如{n,m}?,就是按照最少的字元匹配,如下: 

var num = '123456789';
num.match(/\d{2,4}?/g);   //[12]、[34]、[56]、[78]、[9]

分組

  量詞只能是單個字元匹配多次,如果我們希望匹配某一組字元多次呢?正則表達式中小括弧可以定義一個字元串整體為一個分組。

  我們想要匹配apple這個單詞出現4次可以這樣匹配(apple){4},如下:

  

  如果想要匹配apple或orange出現4次,可以插入管道符"|",例如:

  (apple|orange){4}

  

  如果使用分組的正則表達式中出現多個小括弧即多個分組,那麼匹配結果就會把匹配項也分組並編號,例如:

  (apple)\d+(orange)

  

  如果我們不希望捕獲某些分組,只需要在分組的小括弧前面緊跟一個問號和冒號即可,例如:

  (?:apple)\d+(orange)

  

邊界

  正則表達式也為我們提供了幾個常用的邊界匹配字元,例如:

字元 含義
^ 以xx開頭
$ 以xx結尾
\b 單詞邊界,指[a-zA-Z_0-9]之外的字元
\B 非單詞邊界

  

 

 

 

 

 

 

  其中單詞邊界匹配的是一個位置,這個位置的一側是構成單詞的字元,但另一側為非單詞字元、字元串的開始或結束位置。

前瞻

  前瞻用來匹配接下來出現的是或不是某一個特定的字元集。

表達式 含義
exp1(?=exp2) 匹配後面是exp2的exp1
exp1(?!exp2) 匹配後面不是exp2的exp1

  

 

 

 

 

 

  看一個例子:

  apple(?=orange)

  

(/apple(?=orange)/).test('appleorange123');   //true
(/apple(?=orange)/).test('applepear345');   //false

  再看另一個例子:

  apple(?!orange)

  

(/apple(?!orange)/).test('appleorange123');   //false
(/apple(?!orange)/).test('applepear345');   //true

 

  


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

-Advertisement-
Play Games
更多相關文章
  • [1]創建節點 [2]插入節點 [3]移除節點 [4]替換節點 [5]複製節點 ...
  • 一直對移動項目不是很熟悉,做的很少,用的都是一些百分比,惡補了一下。 一.首先看下頭部。 format-detection翻譯成中文的意思是“格式檢測”,顧名思義,它是用來檢測html里的一些格式的,那關於meta的format-detection屬性主要是有以下幾個設置:meta name="fo ...
  • 前言 隨著移動設備的普及,移動web在前端工程師們的工作中占有越來越重要的位置。移動設備更新速度頻繁,手機廠商繁多,導致的問題是每一臺機器的屏幕寬度和解析度不一樣。這給我們在編寫前端界面時增加了困難,適配問題在當下顯得越來越突出。記得剛剛開始開發移動端產品的時候向設計MM要了不同屏幕的設計圖,結果可 ...
  • 話說App一般都帶有分享到社交平臺的入口,web網頁的分享也有很不錯的框架,但是隨著HTML5的不斷發展,手機web頁面越來越多的進入到我們的生活中,那如何在我們的手機上完成分享呢?話說各大分享平臺都有針對Android、Ios的SDK,作為開發者,我們只需要將SDK集成的我們的項目中即可,通過提供 ...
  • 標簽頁的切換方式 1、控制tab的顯示與隱藏 2、tab不切換,數據載入 控制tab的顯示與隱藏 前端腳本: 1、jquery實現: 引入jquery文件,代碼簡潔 jquery文件較大,瀏覽器不相容 2、js 實現 無需引入jquery文件代碼量大,需每個標簽添加函數及ID 3、插件實現 無需引入 ...
  • let與塊級作用域 在代碼中,使用var申明的變數在代碼塊外面能被識別,但是let命令卻不能被識別,這樣就實現了js的塊級作用域,我們在使用條件語句 迴圈語句等就會不擔心變數污染的問題了,以下是兩種寫法等對比: es6: es5: 在{}用let聲明的變數只有在{}內是有效的 let不會有變數提升 ...
  • 以下的分享是本人最近幾天學習了margin知識後,大有啟發,感覺以前對margin的瞭解簡直太淺薄。所以寫成以下文章,一是供自己整理思路;二是把知識分享出來,避免各位對margin屬性的誤解。內容可能會有點多,但都是精華,希望大家耐心學習。 以下的分享會分為如下內容: 1.margin 屬性的簡單介 ...
  • 在我電腦屏幕上顯示的 電腦是 1920*1080這是在document.compatMode:css1Compat模式 現在是document.compatMode:BackCompat:頁面沒有!doctype聲明 以上紅色部分就是說document.compatMode模式的區別下的網頁可視區域 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...