js中的正規表示式

2022-03-11 23:58:47 字數 4099 閱讀 5589

目錄

建立正規表示式

正規表示式flag

在字串中使用正規表示式

正規表示式的方法

元字元特殊字元

貪婪模式

分組建立正規表示式

var str = "i love english";

var reg = new regexp("love", "g"); 使用建構函式建立

var reg = /love/g; 使用字面量形式

正規表示式flag

i 表示不區分大小寫 var reg = /love/i;

g 全域性匹配

m 多行模式

u uicode模式

y 粘連模式

使用粘連模式,只有指定了正確lastindex,才會匹配元素

var str = "aa-aa-aa";

var reg = /-/y;

reg.lastindex = 2;

console.log(reg.exec(str))

在字串中使用正規表示式

返回給定要查詢的字元第乙個出現的索引位置

var str = "i love english";

var reg = /love/i;

console.log(str.search(reg)); -> 2

返回字串匹配的相關資訊

不使用正則 g

只匹配第乙個滿足的元素

var str = "i love english";

var reg = /love/i;

console.log(str.match(reg)); -> ["love", index: 2, input: "i love english"]

使用小括號可以提取一部分

var reg = /(love)/i;

console.log(str.match(reg)); -> ["love", "love", index: 2, input: "i love english"]

使用正則 g

開啟g後,全域性查詢符合的元素

var str = "aa aa aa";

var reg = /aa/g;

console.log(str.match(reg)); -> ["aa", "aa", "aa"]

使用小括號無用

沒有匹配的元素則返回null

分割字串

var str = "aacdaacdaa";

console.log(str.split(/cd/));

替換字串一部分

var str = "aa-aa-aa";

console.log(str.replace(/-/, "a")); 替換第乙個 "aaaaa-aa"

console.log(str.replace(/-/g, "a")); 替換所有的 "aaaaaaaa"

第二個引數中可以使用反向引用字元

$$ 表示乙個$字元 console.log(str.replace(/-/g, "$$")); -> aa$aa$aa

$& 表示匹配到的字元 console.log(str.replace(/-/g, "$&$&")); -> aa--aa--aa

$` 表示匹配到的字元之前的所有字元 console.log(str.replace(/-/g, "c$`")); -> aacaaaacaa-aaaa

$' 表示匹配到的字元之後的所有字元 console.log(str.replace(/-/g, "c$'")); -> aacaa-aaaacaaaa

$n 表示匹配的字元中第幾個括號中匹配的字元 console.log(str.replace(/(-)/g, "c$1")); -> aac-aac-aa

第二個引數還可以使用函式

只要匹配到了都會呼叫此函式

console.log(str.replace(/(-)/g, function(...obj))); -> aa1aa1aa

正規表示式的方法

判斷是否有符合正則匹配的元素

console.log(/a/.test(str)); -> true

等價於 console.log(str.search(/a/) != -1);

exec用來提取匹配的元素

不使用g,作用和不用g的match方法是一樣的

var str = "aa-aa-aa";

console.log(/-/.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"]

使用g,重複呼叫exec逐步向後查詢

var str = "aa-aa-aa";

var reg = /-/g;

console.log(reg.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"]

console.log(reg.exec(str)); -> ["-", index: 5, input: "aa-aa-aa"]

全部找出匹配的元素

let result = null;

while(result = reg.exec(str))

元字元

\d 數字0~9

\s 空字元spaces,tabs,newlines

\w 字母 a-za-z_

\b 簡單點理解,是用來表示\w單詞的邊界 "1 11 111 22".match(/\b\d\d\b/g) -> ["11", "22"]

\d 非數字字元

\s 非空格字元

\w 非字母字元

\b 非邊界

. 匹配任意字元,除了newlines

特殊字元

需要轉義的字元

. ( ) \ / [ ]

用法 [abc] 表示多個字元中的乙個

[a-z]

[^abc] 表示除了abc以外的字元

量詞 \d 表示5個數字

\d 表示 >=3 <=5 個字元

\d 表示 >=3 個字元

+ 乙個或乙個以上

? 0個或者乙個

* 0個或者多個

或 a|b|c

精確匹配

/^abc$/

貪婪模式

在使用量詞的時候,預設是開啟貪婪模式的

let str = "today is a 'good day', isn't it?"

console.log(str.match(/'.+'/)); -> ["'good day', isn'", index: 11, input: "today is a 'good day', isn't it?"]

取消貪婪模式

console.log(str.match(/'.+?'/)); -> ["'good day'", index: 11, input: "today is a 'good day', isn't it?"]

console.log(str.match(/'[^']+'/)) -> ["'good day'", index: 11, input: "today is a 'good day', isn't it?"]

分組

使用圓括號可以提取組

let str = "aa-bb-aa";

console.log(str.match(/(a)+/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"]

取消捕獲組

console.log(str.match(/(?:a)+/)); -> ["aa", index: 0, input: "aa-bb-aa"]

分的組可以直接在正規表示式中引用

console.log(str.match(/(a)\1/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"]

js中的正規表示式

d 非負整數 正整數 0 0 9 1 9 0 9 正整數 d 0 非正整數 負整數 0 0 9 1 9 0 9 負整數 d 整數 d d 非負浮點數 正浮點數 0 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 非正浮點數 負浮點數 ...

JS中的正規表示式

在電腦科學中,是指乙個用來描述或者匹配一系列符合某個語法規則的字串的單個字串。在很多文字編輯器或其他工具裡,正規表示式通常被用來檢索或替換那些符合某個模式的文字內容。正規表示式驗證一系列有規律的表示式 match 和replace replace 方法返回根據正規表示式進行文字替換後的字串的複製。語...

JS中的正規表示式

正規表示式是一種可以用於模式匹配和替換的強有力的工具 1.基本語法 1 元字元 以及 元字元規定其前導字元必須在目標物件中連續出現一次或多次 fo 因為上述正規表示式中包含 元字元,表示可以與目標物件中的 fool fo 或者 football 等在字母f後面連續出現乙個或多個字母o的字串相匹配。元...