正則表達式,又稱規(guī)則表達式镀迂。(英語:Regular Expression内狗,在代碼中常簡寫為regex怪嫌、regexp或RE),計算機科學的一個概念柳沙。正則表通常被用來檢索岩灭、替換那些符合某個模式(規(guī)則)的文本,即只對字符串操作赂鲤。
基本寫法:
var reg = /a/;
var reg = new RegExp('a'); //當正則需要傳參噪径,則只能用 new RegExp(paramName);
正則默認匹配規(guī)則:正則匹配成功就會結束,不會繼續(xù)匹配
//i: 不區(qū)分大小寫
寫法:var reg = /B/i, var reg = new RegExp('B', 'i')
//g: 全局匹配数初,
寫法:var reg = /B/g, var reg = new RegExp('B', 'g')
正則表達式常用方法:
test: 正則去匹配字符串找爱,如果匹配成功就返回真,失敗就返回假
寫法: reg.test(str)
eg: /\d/g.test('123') // true
search: 正則去匹配字符串泡孩,如果匹配成功车摄,就返回匹配成功的位置,如果匹配失敗就返回-1
寫法: str.search(reg)
eg: 'abcdef'.search(/c/) // 2
match: 正則去匹配字符串,如果匹配成功吮播,就返回匹配成功的數組变屁,如果匹配不成功,就返回null
寫法: str.match(reg)
eg: 'ab1cd12ddf456df'.match(/\d/g) // 返回: [1, 12, 456]
注意: 當match不加g的時候薄料,可以獲取到子項的集合
eg: 'abc'.match(/(a)(b)(c)/) // 返回:[abc, a, b, c]
replace: 正則去匹配字符串敞贡,匹配成功的字符去替換成新的字符串
寫法: str.replace(reg, replace) // replace:第二個參數,可以是字符串摄职,也可以是一個回調函數
eg:
str.replace(reg, 'aa')
eg:
var str = '2017-01-12'
var reg = /(/d)(-)/g
str.replace(reg, function($0, $1, $2) {
// 第一個參數:$0(母親)誊役,
// 第二個參數:$1(第一個孩子),
// 第三個參數:$2(第二個孩子)
console.log($0); // 2017-
console.log($1); // 2017
console.log($2); // -
})
正則表達式語法:
轉義字符:
.(點)---任意字符
\.: 真正的點
\s: 任何不可見字符谷市,包括空格蛔垢、制表符、換頁符等等迫悠。等價于[ \f\n\r\t\v]鹏漆。
\S: 非不可見字符
\d: 數字
\D: 非數字
\w: 字符 (字母,數字创泄,下劃線)
\W: 非字符
\b: 獨立的部分(起始艺玲, 結束, 空格) // 'onetwo'.test(/\bone/) —> true; 'onetwo'.test(/one\b/) —> false
\B: 非獨立的部分
\1: 重復的子項 //\1重復的第一個子項鞠抑,\2重復的第二個子項
eg:'abca'.test(/(a)bc\1/), '<li></li>'.test(/<(\w)></\1>/)
eg: 查找重復字符串的字符和個數
var reg = /(\w)\1+/
var str = 'assssdfdbdsssdfdfsdssdsdssss'
var arr = str.split('').sort()
var index = 0, value=''
arr.replace(reg, function ($0, $1) {
if ($0.length > index) {
index = $0.length
value = $1
}
})
量詞:匹配不確定的個數
{a, b}: 最少出現a次饭聚,最多出現b次 {4,7}:<=4&&>=7, {4,}:最少4次,{4}:正好4次
+: 相當于{1,}, 至少出現一次>=1次
?: 相當于{0, 1}搁拙,0-1次
*: 相當于{0,},至少出現0次
^:正則的最開始位置秒梳,就代表起始的意思
$:正則的最后位置,就代表結束的意思
eg:匹配QQ號箕速,5~12位酪碘,不能是0開頭
var reg = /^[1,9]\d{4,-11}$/
'0123434aa'.test(reg) —>false
eg: 替換字符串的前后空格
var reg = /^\s|\s$/
' hello '.replace(reg, '')
匹配子項:
(): 小括號,分組操作盐茎,
// 把正則的整體叫做(母親)
// 然后把左邊第一個小括號里的正則兴垦,叫做這個第一個子項(母親的第一個孩子),第二個小括號就是第二個孩子
[]: 一組相似的元素[abc], [a-z0-9],[^>]
// 'ab'.test(/[abc]/)
|: 或者