01正規表示式基礎知識

2021-10-08 09:04:33 字數 3066 閱讀 5227

使用字面量形式

var patt = /正規表示式/修飾符;

var patt = /a/gi;

使用new關鍵字宣告; 引數都是字串

var patt = new regexp(正規表示式, 修飾符)
引數解析:

兩種宣告方式的區別

正則的組成: 正規表示式由 元字元,字元類,量詞組成

元字元

^ : 以什麼作為開頭

$ : 以什麼作為結束

. : 除空白符以外的任意乙個字元

: 匹配在範圍內任意乙個字元

[^] : 除了範圍內的任意乙個字元

字元類[a-z] : 匹配小寫字母 a 到 z

[a-z] :匹配大寫字母 a 到 z

[0-9] : 匹配的是數字

\w : 匹配 下劃線, 小寫字母 a 到 z,大寫字母 a 到 z;數字0-9; 等價形式[a-za-z0-9_]

\w :匹配的是 除了上邊以外的所有字元; 等價形式[^a-za-z0-9_]

\d : 匹配的是數字 ,等價形式 [0-9]

\d : 匹配的是除了數字以外的字元

\s : 匹配的是空白符

\s : 匹配除了空白符以外的字元 量詞

*: 匹配0次或者多次

+:匹配1次或者多次

?: 匹配0次或者1次

: 匹配n次

: 至少匹配n次, 最多沒限制

: 至少匹配n次,最多匹配m次

匹配模式

貪婪模式 : 盡可能多的匹配 ; + *

惰性模式 : 盡可能少的匹配 ; +? *? ? ?

候選 |

var patt = /red|blue/;
分組 ()
var patt = /(kid)/  // kid 作為整體進行匹配三次

var patt = /kid/ // d匹配三次

反向引用 ()

反向引用引用的是匹配的結果,不是匹配規則

// var res = /(['"])[^\1]*\1/.test('\"tom\"');

var res = /(['"])[^\1]*\1/.test('\"tom\'');

console.log(res)

注意:反向引用 $1 或者是 \1 :數字是左括號的順序

var str = "todayhelloworldtom";

var patt = /(today)(hello(world(tom)))/g;

var res = patt.test(str);

var val1 = regexp.$1; // todayhelloworldtom

var val2 = regexp.$2 // helloworldtom

var val3 = regexp.$3 // worldtom

var val4 = regexp.$4 // tom

console.log(val1, val2, val3, val4)

只分組,不引用 ?:

有時只需要分組,不需要進行反向引用,使用(?:)可以解決

var patt = /(hello(?:world))/;
正向前瞻 和 負向前瞻

正向前瞻 exp1(?=exp2) :exp1表示式的後邊只能是exp2代表的表示式才能匹配成功

var patt = /hello(?=wolrd)/;
負向前瞻 exp1(?!exp2) : exp1表示式的後邊只要不是exp2代表的表示式就匹配成功

var patt = /hello(?!wolrd)/;
match(patt) : 找到乙個或者多個匹配; 結果是乙個陣列,如果沒有使用全域性匹配修飾符g, 結果只有乙個, 找到的是第乙個匹配的值; 如果使用的g, 則結果有多個

var str = '123542435346467333';

// var res = str.match(/\d?/g);

var res = str.match(/\d?/);

console.log(res)

// 沒有使用修飾符g:

["123", index: 0, input: "123542435346467333", groups: undefined]

0: "123"

groups: undefined

index: 0

input: "123542435346467333"

length: 1

__proto__: array(0)

// 使用修飾符 g

["123", "542", "435", "346", "467", "333"]

repalce(patt, newstr) : 替換於正則表達匹配的字串

search(patt) : 檢索是否存在和正規表示式匹配的字元; 存在的返回值為第一次匹配位置的索引值; 如果不存在,返回值為 -1 ; 不能識別全域性修飾符 g; 但是可以識別修飾符 i;

test() : 判斷字串是否符合正則規則, 結果是布林值, true: 符合規則, false: 不符合規則

exec() : 檢索字串中是否存在符合正則規則的子串,結果是陣列, 每執行一次exec()方法,都會得到乙個結果; 因為rexexp物件的 lastindex 屬性 記錄每一次匹配位置的索引值; 下次匹配從lastindex記錄的位置開始

因此,檢索所有的結果, 需要借助迴圈

var str = '12342354324534456345';

var patt = /\d/g;

var res ;

while(res = patt.exec(str))

正規表示式基礎知識

我們先從簡單的開始。假設你要搜尋乙個包含字元 cat 的字串,搜尋用的正規表示式就是 cat 如果搜尋對大小寫不敏感,單詞 catalog catherine sophisticated 都可以匹配。也就是說 1.1 句點符號 假設你在玩英文拼字遊戲,想要找出三個字母的單詞,而且這些單詞必須以 t ...

正規表示式基礎知識

乙個正規表示式就是由普通字元 例如字元 a 到 z 以及特殊字元 稱為元字元 組成的文字模式。該模式描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。如 jscript vbscript 匹配 t t 匹配乙個空白行。d d d d 驗證乙個i...

正規表示式基礎知識

正規表示式基礎知識 正規表示式是一種可以用於模式匹配和替換的強有力的工具,乙個正規表示式就是由普通的字元 例如字元 a 到 z 以及特殊字元 稱為元字元 組成的文字模式,它描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。正規表示式在字元資料處...