再看正規表示式

2021-09-13 18:06:09 字數 2760 閱讀 6308

平時js編碼時,對字串的操作隨處可見。正規表示式便是一種用來匹配字串的一把利劍。它的設計思想是用一種描述性的語言來給字串定義乙個規則,凡是符合規則的字串,我們就認為它「匹配」了。如果您是一位老司機,那麼正規表示式肯定耳熟能詳,但是如果您是剛上車的話,那麼咱們就接下來****。

主要有下面兩種方式,經常食用的是字面量形式。當然建構函式的更加靈活,可以根據條件動態生成正則。

regexp物件建立

var reg = new regexp('a+b', g);

reg.test('saab') //true

字面量

var reg = /a+b/g;

reg.test('saab') //true

元字元描述

.查詢單個字元,除了換行和行結束符。

w查詢單詞字元。

w查詢非單詞字元。

d查詢數字。

d查詢非數字字元。

s查詢空白字元。

s查詢非空白字元。

b匹配單詞邊界。

b匹配非單詞邊界。

0查詢 nul 字元。

n查詢換行符。

f查詢換頁符。

r查詢回車符。

t查詢製表符。

v查詢垂直製表符。

***查詢以八進位制數 *** 規定的字元。

xdd查詢以十六進製制數 dd 規定的字元。

u***x

查詢以十六進製制數 ***x 規定的 unicode 字元。

量詞描述n+

匹配任何包含至少乙個 n 的字串。

n+??開啟懶惰模式,開啟最小匹配

n*匹配任何包含零個或多個 n 的字串。

n*??開啟懶惰模式,開啟最小匹配

n?匹配任何包含零個或乙個 n 的字串。

n匹配包含 x 個 n 的序列的字串。

n匹配包含 x 至 y 個 n 的序列的字串。

n匹配包含至少 x 個 n 的序列的字串。

n$匹配任何結尾為 n 的字串。

^n匹配任何開頭為 n 的字串。

?=n匹配任何其後緊接指定字串 n 的字串。舉個例子,/jack(?=sprat)/,如果"jack"後面跟著sprat,則匹配之。

?!n匹配任何其後沒有緊接指定字串 n 的字串。舉個例子,/d+(?!.)/ 只會匹配不被點(.)跟隨的數字。

特殊字元描述$

匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字元本身,請使用 $。

( )標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 ( 和 )。

*匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 *。

+匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 +。

.匹配除換行符 n 之外的任何單字元。要匹配 . ,請使用 . 。

[標記乙個中括號表示式的開始。要匹配 [,請使用 [。

?匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 ?。

\將下乙個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'n' 匹配換行符。序列 '\' 匹配 "",而 '(' 則匹配 "("。

^匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 ^。

{標記限定符表示式的開始。要匹配 {,請使用 {。

指明兩項之間的乙個選擇。要匹配

,請使用 \。

定位字元描述^

匹配輸入字串開始的位置。如果設定了 regexp 物件的multiline 屬性,^ 還會與 n 或 r 之後的位置匹配。

$匹配輸入字串結尾的位置。如果設定了 regexp 物件的 multiline 屬性,$ 還會與 n 或 r 之前的位置匹配。

b匹配乙個字邊界,即字與空格間的位置。

b非字邊界匹配。

修飾字元描述g

執行全域性匹配(查詢所有匹配而非在找到第乙個匹配後停止)。

i執行對大小寫不敏感的匹配。

m執行多行匹配。

方括號用於查詢某個範圍內的字元:

字元含義

[xyz]

乙個字元集合,也叫字元組。匹配集合中的任意乙個字元。你可以使用連字元'-'指定乙個範圍。例如,[abcd] 等價於 [a-d],匹配"brisket"中的'b'和"chop"中的'c'。

[^xyz]乙個反義或補充字符集,也叫反義字元組。也就是說,它匹配任意不在括號內的字元。你也可以通過使用連字元 '-' 指定乙個範圍內的字元。例如,1

等價於 2

。 第乙個匹配的是 "bacon" 中的'o' 和 "chop" 中的 'h'。

通常使用分組的話,匹配子表示式並且會捕獲匹配項。 這被稱為捕獲括號;有捕獲括號便會有非捕獲括號,下面這種形式便會開啟。(?:x);

捕獲表示式的乙個用法便是,反向引用。

對乙個正規表示式模式或部分模式兩邊新增圓括號將導致相關匹配儲存到乙個臨時緩衝區中,所捕獲的每個子匹配都按照在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式。每個緩衝區都可以使用 n 訪問,其中 n 為乙個標識特定緩衝區的一位或兩位十進位制數。

例如:\b(\w+)\b\s+\1\b便會捕獲相鄰的相同單詞。

abc ↩

a-c ↩

s ↩

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...