搜尋
首頁web前端js教程JavaScript中的正規表示式

首先正規表示式是什麼?

正規表示式是一個自訂規則的表達式,用來匹配符合定義的規則的字串。什麼意思?例如這是一個正規表示式:/d/,d的意思就是任一個數字,所以這個正規表示式的意思就是要匹配一個任意數字。大概明白了吧!

下面我們來看看正規表示式都由些什麼東西組成。

一、直接量字

JavaScript中的正規表示式

二、範圍類

JavaScript中的正規表示式

什麼意思?舉個栗子:/[a-z]3{1,3}5+/這個表達式,意思是,任一個英文字母出現一次,然後出現一到三次數字3,然後數字5至少出現一次。

下面我們在chrome調試工具中用test()方法試一下:

註:test()方法用來檢驗一個字串是否匹配某個正規表示式,接收一個參數,即目標字串,如匹配則回傳true,否則回傳false

JavaScript中的正規表示式

三、字符類

JavaScript中的正規表示式

什麼東西,寶寶看不懂啊!讓我們來看個例子:/[abc]wd{2}/,這個表達式的意思是,匹配abc中任一個,接下來是一個單字([a-zA-Z0-9])或下劃線,然後是兩個數字。看圖!

JavaScript中的正規表示式

四、錨字

JavaScript中的正規表示式

這裡說一下^,表示以…開頭,我們看個例子:

JavaScript中的正規表示式

式中沒有比較原理跟^一樣,這裡不再贅述,只是要注意一點,$需要寫在表達式的最後面。

五、修飾符JavaScript中的正規表示式

在沒有g修飾符的情況下,正規表示式匹配到第一項即停止匹配,當有g修飾符時,會找到所有匹配項。我們學習一個正規表示式的新方法replace():

注:replace()方法作用是替換字串中規定的字符,接收兩個參數,第一個參數是一個正規表示式,表示你要替換的內容,第二個參數是一個字串,表示你要替換成的內容。看下面例子! JavaScript中的正規表示式

只替換了第一個數字,再看下有g修飾符的情況:

JavaScript中的正規表示式


全部數字都被替換了,明白g是乾嘛的了吧。

 JavaScript中的正規表示式

再說i,i修飾符就很簡單了,表示不區分大小寫,看下面例子:

加了i之後,不管大小寫字母都被替換了!

 JavaScript中的正規表示式

最後m表示多行搜索,例如要匹配以字母a開頭的字串,在有m修飾符的情況下,換行後以a開頭的行也會被匹配。限於篇幅這裡不貼圖了。

 

六、分組

正規表示式中用圓括號()表示分組,每個()表示一個分組。而分組中的內容用$1、$2…表示,仍然看例子:

例如日期有這兩種表示法:月-日-年和年/月/日,怎麼把月-日-年換成年/月/日呢?我們來看看

JavaScript中的正規表示式

在這個例子中,我們給月、日和年分了組,然後再利用$反向引用,於是實現了日期格式的轉換。

 

七、方法

關於正則表達式的零零碎碎的東西基本上講完了,下面我們開始學習在正則表達式中用到的方法!有兩類,一類是正規表示式物件方法,一類是字串物件方法。

一、正規表示式物件方法

有兩個,test()和exec()。 test()方法我們學過了,現在講exec()方法。

exec()方法傳回一個數組,數組的第一個元素是匹配的文本,第二個元素是匹配文本的第一個子文本,第三個元素是匹配文本的第二個子文本…以此類推。這樣很抽象,看下面例子就懂了!

exec()的呼叫又分成兩種情況:非全域呼叫和全域呼叫。

非全域呼叫狀況:

看下圖範例

JavaScript中的正規表示式

這裡我們看到,第一次配對了"a12b",後面兩個元素分別是第一個分組"1"和第二個分組"2"。可是第二次執行exec()方法,配對的依然是"a12b",這是意料之外的。照理說第二次配對的應該是"c56d",可是為什麼還是"a12b"呢?原因就在lastIndex屬性上。 lastIndex屬性表示上次匹配結果的最後一個字符的下一個字符,但是這屬性只在全局調用時(即表達式中加了g修飾符的情況)生效,非全局調用時始終為0。作為對比,我們看看全域呼叫情況!

全域呼叫情況:

JavaScript中的正規表示式

可以看到,第一次執行exec()返回了"a12b",lastIndex為4,即為字串str中數字3的位置;第二次返回了"c56d ",lastIndex為10,即為字串str中數字7的位置。這時lastIndex起作用了,所以兩次執行結果都在意料之中。

二、字串物件方法

字串物件方法有:search()、replace()、match()、split()。

一、search()方法

search()方法用於檢索字串中指定的子字串,或檢索與正規表示式相符的子字串。如果符合到,則傳回第一個符合結果的index,沒符合到則回傳-1。接收一個參數,這個參數可以是字串,也可以是正規表示式。這個方法每次都從字串的開頭開始匹配。我們看下面例子:

JavaScript中的正規表示式

兩次搜尋數字2回傳的index都是1,而不會是第二個數字2的index5。第三和第四次搜尋傳入一個正規表達式,都傳回了相對應的index。

二、replace()方法

這個方法前面已經學過,這裡繼續。有這幾種形式:replace(str,replaceStr)、replace(RegExp,replaceStr)、replace(RegExp,function)。前面兩種比較簡單,看例子就懂了:

JavaScript中的正規表示式

第一次傳入字串,把數字2替換成X,第二次傳入正規表達式,把全部數字替換成X。

replace(RegExp,function)方法第二個參數是一個函數,這個方法適用於比較複雜的字符替換,大家有興趣可以自己找學習資源,這裡不作介紹。

三、match()方法

match()方法傳入一個參數:正則表達式,用來查找字串中與傳入的正則表達式相匹配的文本,如找不到則返回null,如果找到,傳回一個數組,這個數組在非全域呼叫和全域呼叫時是不一樣的,下面分開說。

非全局調用:

在非全局調用時,返回的數組是這樣的:第一個元素是匹配的文本,第二個元素是匹配文本的第一個子文本,第三個元素是匹配文本的第二個子文本……以此類推。是不是有似曾相識的感覺?沒錯,這一點和exec()方法一模一樣。

JavaScript中的正規表示式

非全域呼叫時每次尋找依然從字串的開頭開始,下面看看全域呼叫!

全域呼叫:

在全域呼叫(即正則表達式中有g修飾符)時,傳回的數組是這樣的:數組的每一項都是匹配的文本,不再有匹配文本的子文本了。

JavaScript中的正規表示式

和正規表示式相符的"a12b"和"c56d"都出現在陣列裡了。其實match()方法和exec()方法作用都是一樣的,只不過一個由字串調用,一個由正規表示式調用而已。

四、split()方法

split()方法用來把字串分割成數組,什麼意思呢?看下面範例:

JavaScript中的正規表示式

split()方法接收的參數可以是字串,也可以是正規表示式。從例子可以看到,參數傳什麼,就在字串中去掉什麼,然後分割成陣列。


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具