正規表示式知識點及相關面試題

2021-10-24 10:14:26 字數 4726 閱讀 6239

概念:正規表示式就是乙個表示式,匹配特殊字元或有特殊字元搭配原則的字元的最佳選擇。

1.

var reg =

/abc/

;//字面量建立相當於和建立陣列相同,直接建立

2.var reg =

newregexp

('abc'

);使用建構函式建立,第乙個引數是規則,第二個引數是屬性,引數都寫字串形式的

使用new regexp 和不使用new的區別在於:不new那麼字面量的正則和建立的正則指向同乙個人(返回的就是裡面的正規表示式的引用) :使用new 那麼就不是同乙個人。

reg.

test

(str)

;測試正規表示式是否被包含在str裡面

str.

match

(reg)

;字串的方法,返回字串匹配正規表示式的值,在不使用全域性查詢(g)的情況下找到乙個就返回的

g代表的是global全域性匹配,但是如果多行的話只會匹配第一行

i代表ignorecase忽略大小寫,

m代表multiline多行匹配,

\   轉義字元

\n 換行

\r 行結束

\t 乙個table(4個空格)

\空白 轉義空白(換行)用使字串換行使用

| 或

中除-需要轉義以外,其他字元都不需要,都能識別

乙個代表一位,匹配中的任意一位

[^]^放在表示式裡面就叫非,放外面叫以什麼開頭

[abc] 查詢方括號內的任意乙個字元

[^abc] 查詢任何不在方括號內的字元

[0-9] 查詢0-9之間的數字

[a-z] 查詢任何小寫字母

[a-z] 查詢任何大寫字母

[a-z] 查詢任何字母

(red|blue|green) 查詢指定字串(子表示式) | 這個叫或者的意思(abc|bcd|abc)

()子表示式: /(a)\1/ : \1引用第乙個子表示式的內容(反向引用)注意$1表示第乙個子表示式的內容

使用該子表示式會把子表示式的內容匹配出來掛上,可以使用console.log(reg.exec(str))檢視(str.match也是相同的,在不加g的情況下)

以下均遵循貪婪匹配:

n+      匹配任何包含至少乙個n的字元(這個n可以出現1到無數次)(符合貪婪匹配原則)

n* 匹配任何包含0個或多個n的字元(這個n可以出現0到無數次)

var reg = /\w*/ var str = 'abc' str.match(reg) == ['abc', '']會多匹配乙個邏輯上的空出來

如果reg = /\d*/ 那麼看游標,幾個游標幾個空

n? 匹配任何0個或乙個n的字元

n 匹配x個n的序列字串

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

n$ 匹配以n結尾的字串

^n 匹配任何以n開頭的字串

?=n 正向肯定預查匹配任何後面緊接著指定字串n的字串

?!n 正向否定預查匹配任何其後沒有緊接著指定字串n的字串

?<=n 反向肯定預查匹配任何前面緊跟著指定字串n的字串

?補充(?:n) 匹配時子表示式中沒有這一項(不補獲分組)

global 檢視regexp物件是否具有g標誌

ignorecase 檢視regexp物件是否具有i標誌

multiline 檢視regexp物件是否具有m標誌

source 檢視正規表示式源文字

lastindex 乙個整數標誌開始下一次匹配的字元位置(一般與exec一起使用)

compile    編譯正規表示式。	(就是改變這個正規表示式)

exec(重要的方法) 檢索字串中指定的值。返回找到的值,並確定其位置。(如果屬性不加g那麼 lastindex永遠是第一位)

test 檢索字串中指定的值。返回 true 或 false。

search          檢索正規表示式相匹配的值(返回匹配到的位置,中關心能不能匹配到,不關心能匹配多少個,所以加不加g都一樣,匹配不到返回-1)

match 查詢所有符合正則匹配條件的結果

replace(重要) 替換與正規表示式匹配的字串(不寫正則的時候只能替換乙個,它沒有訪問全域性的權利)

split 把字串分割成陣列(注: 用字表示式分割的話會保留子表示式)

正規表示式實現aabb的形式變成bbaa

var str =

'aabbccdd'

;var reg =

/(\w)\1(\w)\2/g

;var str1 = str.

replace

(reg,

function

($, $1

,$2)

) console.

log(str1)

;//bbaaddcc

給10000000000三位打點 變成 10.000.000.000

var str =

'10000000000'

;var reg =

/(?=(\b)(\d)+$)/g

; str.

replace

(reg,

'.')

;

字串去重 aaaaaaaaaaaaaaaaaaaaaabbbbbbbbcccccccccc變成abc

var str =

'aaaaaaaaaaaaaaaaaaaaaabbbbbbbbcccccccccc'

;var reg =

/(\w)\1*(\w)\2*(\w)\3*/g

;str.

replace

(reg,

function

($, $1

, $2

, $3))

;//"abc"

把the-first-name轉換成小駝峰式thefirstname

var str =

'the-first-name'

;var reg =

/-(\w)/g

;str.

replace

(reg,

function

($, $1))

//thefirstname

匹配結尾的數字

//結尾是否為數字

var str =

'dkfdj1232'

;var reg =

/\d$/g

;str.

match

(reg)

;//["2"]

//首或者尾是否為數字

reg =

/'^\d|\d$'/g

//首尾都為數字

reg =

/'^\d[\s\s]*\d$'/g

統一空格數

var str =

' fkjdf '

;var reg =

/\s+/g

; str.

replace

(reg,

' ')

;//" fkjdf "

判斷字串是不是由數字構成

var str =

'fdjfd214234234'

;var reg =

/(\d*?:[a-za-z])/g

; reg.

test

(str)

;// false

刪除字串中的空格

//刪除前後空格

var str =

' d kdfjd dfjdkf '

;var reg =

/(^\s*)|(\s*)$/g

; str.

replace

(reg,'')

;//"d kdfjd dfjdkf"

//刪除所有空格

var reg =

/(\s*)/g

;str.

replace

(reg,'')

;//"dkdfjddfjdkf"

身份證號匹配

var str =

'12345678976543879x'

;var reg =

/(^\d$)|(^\d$)|(^\d(\d|x|x)$)/

;//不需要全域性匹配

reg.

test

(str)

;

郵箱位址驗證

var str =

'[email protected]'

;var reg =

/^[0-9a-za-z_-]+@[0-9a-za-z_-]+(\.[0-9a-za-z_-]+)+$/

;reg.

test

(str)

;

正規表示式知識點

re.match與re.search的區別 re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none 而re.search匹配整個字串,直到找到乙個匹配。flags 標誌位,用於控制正規表示式的匹配方式,如 是否區分大小寫,多行匹配等等 import re s 1...

正規表示式知識點

正則的知識點 1.建立例項 var reg new regexp pattern,flag d g 2.flag 識別符號 1.i 忽略大小寫匹配 2.m 多行匹配 3.g 全域性匹配 應用與所有,而不是找到第乙個就停止 3.第一段知識點 1.xyz xyz中任意乙個字元 等價於 x z 2.xyz...

正規表示式及知識點總結

match 字串用法 成功則返回值,錯誤則返回null var str 18229096120 str.match test 正則物件用法 成功則返回true,錯誤則返回false 宣告正則變數 var reg new regexp reg.test str 匹配字串的開頭,在多行檢索中,匹配一行的...