在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 匹配數字型別 匹配字母 數字 下劃線 匹配空字元 匹配多個字元 匹配乙個或多...