摘要:一幾個概念正則表達式正則表達式是描述一組字符串特征的模式,用來匹配特定的字符串。捕獲分組非捕獲分組正則表達式中通常用括號分組內容來表示一個捕獲分組,以便后續對其引用,它通常和后向引用相聯系。
寫在前面
正則真是個偉大的發明啊。分分鐘提高工作效率,
以前刪除某個文件夾下面的文件(Mac):
command + A && command + delete
現在只需在命令行下
rm -rf *
而且如果你要刪除的文件有規律的話,
// 刪除開頭為"2017-11-"的所有文件 rm -rf 2017-11-* // 刪除.txt文件 rm -rf *.txt
簡直是進入現代化啊。總而言之,學好正則非常必要啊。
本文的代碼使用JavaScript書寫。javascript 對正則的實現基于RegExp對象。其說明文檔在(MDN-RegExp介紹),可以了解下。
正則表達式
正則表達式是描述一組字符串特征的模式,用來匹配特定的字符串。——Ken Thompson
字符串字面值 原生的字符串,沒有添加正則元素在里面,看到什么就是什么。比如Hello world 這個就是一個字面值。
元字符 在正則表達式中有特殊含義的字符,是正則表達式保留字。比如*、+、?、[、]
字符組 用于匹配字符的集合,通常置于[]內,如[0-9]、[a-z]
字符組簡寫式
如其名字所說,是字符組的簡寫形式。如d匹配數字,相當于[0-9],使用簡寫式可以使表達式更精煉。
捕獲分組vs非捕獲分組 正則表達式中通常用括號(分組內容)來表示一個捕獲分組,以便后續對其引用,它通常和 后向引用 相聯系。與之相對的是非捕獲分組(?:分組內容) 。因為非捕獲分組不會存儲到內存中,通常性能會好于捕獲分組。如:(abc)#1可以匹配abc#abc,這里1引用了前面的(abc),非捕獲分組表示abc 則可以寫成(?:abc)
量詞 量詞用于描述某個模式出現的個數。
* 用于表示0個或多個 ?表示0個或1個 + 表示1個或多個 {n} 表示出現n個
邊界 用來標記字符串中的位置,如^和
$ 分別用于匹配行的起始和結束位置。用于標記單詞的邊界.
var hw = /hello world/; hw.test("hello world");// true
對于單個數字,我們可以用[0-9],也可以用d,當然也可以用[0123456789],根據具體需要我們也可以選擇部分數字進行匹配[12],這只會匹配1和2。
// 匹配0-9的數字 var reg1 = /[0-9]/; // 簡寫形式 var reg2 = /d/; reg1.test("5"); reg2.test("5");
舉個例子,我們可以用數字匹配來驗證年份。
// 匹配1000 ~ 2999 var yearReg = /^[1-2]ffffd$/; yearReg.test("1970"); yearReg.test("2999");
與d相反的是D用于匹配非數字字符,它相當于[^d]
w 用于匹配單詞字符,何謂單詞字符,其實就相當于[_a-zA-Z0-9],既數字、字母、和下劃線。
同樣它的相反是W,大寫的W
s用于匹配空白符,它相當于[
],既空格、制表符( )、換行符(
)、回車符(
)。
這個應用就挺大了,比如利用replace()可以把文本中的空白符去掉。
var sReg = /s/; var text = "wor ld"; // 刪除空白字符 text.replace(sReg, "");//world
.用于匹配任意字符。結合量詞我們可以用來匹配字符長度。
var reg = /^.{4}$/; reg.test("-R3s"); reg.test("hello");三、選擇、分組和引用
選擇操作可以在多個子模式中選擇一種,(html|HTML)可以匹配html也可以匹配HTML,
var reg = /<(html|HTML)>/; reg.test("");//true reg.test("");//true
前面提到過,()表示一個捕獲分組,括號代表一個分組的開始,從左到右分別1、2、3……,引用的時候就可以用1、2來引用了。
// 這里1表示前面的(html|HTML) var reg = /<(html|HTML)>.*1>/; reg.test("");//true reg.test("");//true
有時候我們的分組并不需要后面引用,這時候可以使用非捕獲分組來提升性能。
// 判斷廣東省廣州市的電話號碼 var reg = /^(?:020)-d{8}$/; reg.test("020-88886666");//true // 判斷151或127開頭的手機號 var reg2 = /^(?:151|127)d{8}$/; reg2.test("15166668888");//true四、匹配Unicode字符
uXXXX 或者xxx用于匹配Unicode 字符,
"京"的Unicode編碼為u4eac
那么我們可以嘗試匹配一下北京的車牌號:
var reg = /^u4eac[A-Z][0-9_A-Z]{5}$/; reg.test("京AF2345");//true五、結語
正則表達式是相當強大的工具,這篇文章只能算是自己入門的一個簡單的總結。還有許多特性等待在實踐中發掘。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89728.html
摘要:正則的擴展參數為字符串,那么第二個參數表示正則表達式的修飾符,如下等價于參數為一個正則表達式,這時返回一個原有正則表達式的拷貝。如下調用調用調用調用修飾符對正則表達式添加了修飾符,用來正確處理大于的字符。 showImg(https://segmentfault.com/img/bVbrJqm?w=800&h=1200); 1. 正則的擴展 參數為字符串, 那么第二個參數表示正則表達式...
摘要:一前言正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學,在文章開始的時候我們都會帶著問題去思考如何正確應用正則表達式解決出現的問題,在解決問題的過程中增長你的知識,提高你的實踐能力。 一 前言 正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學,在文章開始的時候我們都會帶著問題去思考如何正確應用正則表達式解決出現的問題,在解決問題的過程中增長你的知識,提高你的實踐...
摘要:本文章屬于爬蟲入門到精通系統教程第五講在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容萬能匹配文章的標題文字我們要獲取的如上所示,假如我們要獲取文章的標題這幾個文字,那么我們應該怎么做呢我 本文章屬于爬蟲入門到精通系統教程第五講 在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容 萬能匹配 h...
摘要:前言正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。接下來是正則部分,注意后面的并不匹配,也就是比如,實際匹配的值是和,在和后面加上,就完成了預期。 前言:正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了JavaScript中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。個人總結...
閱讀 1039·2021-09-13 10:29
閱讀 3390·2019-08-29 18:31
閱讀 2633·2019-08-29 11:15
閱讀 3011·2019-08-26 13:25
閱讀 1369·2019-08-26 12:00
閱讀 2293·2019-08-26 11:41
閱讀 3377·2019-08-26 10:31
閱讀 1488·2019-08-26 10:25