正規表示式教程 實踐篇

2021-08-14 08:50:44 字數 4009 閱讀 4345

在js中建立正則有兩種辦法,字面量和new,和建立其他型別變數一樣

var reg = /abc/g // 字面量

var reg = new regexp('abc', 'g') // new方式,意思和上面一樣

js中用到正則的地方有兩個入口,正則的api和字串的api,regexp#test等於regexp.prototype.test

每個正則例項都有test方法,test的引數是字串,返回值是布林值,表示當前正則是否能匹配指定的字串

/abc/.test('abc') // true

/abc/.test('abd') // false

exec使用方法和test一樣,只是返回值並不是布林值,而是返回匹配的結果

匹配成功返回乙個陣列,陣列第一項是匹配結果,後面一次是捕獲的分組

/abc(d)/.exec('abcd') // ["abcd", "d", index: 0, input: "abcd"]

此陣列還有另外兩個引數,input是輸入的字串,index表示匹配成功的序列在輸入字串中的索引位置

如果有全域性引數(g),第二次匹配時將從上次匹配結束時繼續

var r1 = /ab/

r1.exec('ababab') // ['ab', index: 0]

r1.exec('ababab') // ['ab', index: 0]

var r2 = /ab/g

r2.exec('ababab') // ['ab', index: 0]

r2.exec('ababab') // ['ab', index: 2]

r2.exec('ababab') // ['ab', index: 4]

這一特性可以被用於迴圈匹配,比如統計字串中abc的次數

var reg = /abc/g

var str = 'abcabcabcabcabc'

var num = 0;

var match = null;

while((match = reg.exec(str)) !== null)

console.log(num) // 5

如果匹配失敗則返回null

/abc(d)/.exec('abc') // null

search方法返回匹配成功位置的索引,引數是字串或正則,結果是索引

'abc'.search(/abc/) // 0

'abc'.search(/c/) // 2

如果匹配失敗則返回-1

'abc'.search(/d/) // -1

'abc'.search(/d/) !== -1 // false 轉換為布林值

match方法也會返回匹配的結果,匹配結果和exec類似

'abc'.match(/abc/) // ['abc', index: 0, input: abc]

'abc'.match(/abd/) // null

如果有全域性引數(g),match會返回所有的結果,並且沒有index和input屬性

'abcabcabc'.match(/abc/g) // ['abc', 'abc', 'abc']

字串的split方法,可以用指定符號分隔字串,並返回資料

'a,b,c'.split(',') // [a, b, c]

其引數也可以使乙個正則,如果分隔符有多個時,就必須使用正則

'a,b.c'.split(/,|\./) // [a, b, c]

字串的replace方法,可以將字串的匹配字元,替換成另外的指定字元

'abc'.replace('a', 'b') // 'bbc'

其第乙個引數可以是正規表示式,如果想全域性替換需新增全域性引數

'abc'.replace(/[abc]/, 'y') // ybc

'abc'.replace(/[abc]/g, 'y') // yyy 全域性替換

在第二個引數中,也可以引用前面匹配的結果

'abc'.replace(/a/, '$&b') // abbc $& 引用前面的匹配字元

'abc'.replace(/(a)b/, '$1a') // aac &n 引用前面匹配字元的分組

'abc'.replace(/b/, '$\'') // aac $` 引用匹配字元前面的字元

'abc'.replace(/b/, "$'") // acc $' 引用匹配字元後面的字元

replace的第二個引數也可以是函式,其第乙個引數是匹配內容,後面的引數是匹配的分組

'abc'.replace(/\w/g, function (match, $1, $2) )

// a-b-c-

regexp是乙個全域性函式,可以用來建立動態正則,其自身也有一些屬性

來個例子

/a(b)/.exec('abc') // ["ab", "b", index: 0, input: "abc"]

regexp.$_ // abc 上一次匹配的字串

regexp.$1 // b 上一次匹配的捕獲分組

regexp.input // abc 上一次匹配的字串

regexp.lastmatch // ab 上一次匹配成功的字元

regexp.length // 2 上一次匹配的陣列長度

正規表示式的例項上也有一些屬性

還是看例子

var r = /abc/igm;

r.flags // igm

r.ignorecase // true

r.global // true

r.multiline // true

r.source // abc

lastindex比較有意思,表示上次匹配成功的是的索引

var r = /abc/igm;

r.exec('abcabcabc')

r.lastindex // 3

r.exec('abcabcabc')

r.lastindex // 6

可以更改lastindex讓其重新開始

var r = /abc/igm;

r.exec('abcabcabc') // ["abc", index: 0]

r.exec('abcabcabc') // ["abc", index: 3]

r.lastindex = 0

r.exec('abcabcabc') // ["abc", index: 0]

來幾個常用的例子

/(?:0\d-)?\d/ // **號 010-*** ***

/^1[378]\d$/ // 手機號 13*** 17*** 18***

/^[0-9a-za-z_]+@[0-9a-za-z]+\.[z-z]+$/ // 郵箱

去除字串前後空白

str = str.replace(/^\s*|\s*$/g, '')

到這裡你已經學會了正則的語法,並且學會了在js中使用正則的方法,接下來快去實戰吧,要想學會正則必須多加練習,正所謂拳不離手曲不離口嗎

正規表示式實踐

正規表示式通常用來檢索 替換符合匹配某個模式的文字。字元匹配 代表任意單個字元,乙個字母 數字或漢字等 代表指定範圍內的字元,abc 表示a,b,c 這3個字母中的任意乙個 表示排除 中的字元以外的字元 alnum 所有大小寫字母和數字,數量1 alpha 所有大小寫字母,數量1 blank 代表空...

正規表示式篇

利用正規表示式來判斷輸入的字串格式是否正確 string regex 1 d 2 0 4 d 25 0 5 1 9 d 1 9 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 判斷ip ...

正規表示式 教程

引言 什麼是正規表示式?準備工作 匹配單個字元 匹配固定單個字元 匹配任意單個字元 匹配 元字元 匹配字元組 字元組的基本語法 在字元組中使用字元區間 反義字元組 匹配特殊字元7 匹配元字元 匹配空字元 匹配特定字元型別9 匹配數字型別 匹配字母 數字 下劃線 匹配空字元 匹配多個字元 匹配乙個或多...