正則表達(dá)式用于對(duì)字符串模式匹配及檢索替換,是對(duì)字符串執(zhí)行模式匹配的強(qiáng)大工具。
一、正則表達(dá)式
1、定義正則(語(yǔ)法):
new RegExp('pattern','modifiers');
/pattern/modifiers
pattern(模式) 描述了表達(dá)式的模式
modifiers(修飾符) 用于指定全局匹配、區(qū)分大小寫(xiě)的匹配和多行匹配
2、修飾符:
i 忽略大小寫(xiě)
m 多行模式
g 全局
3、正則中方法:
1)str.search(reg); //搜索
如果找到,返回什么第一個(gè)找到的位置
如果找不到,返回-1, indexOf
2)str.match(reg); //匹配
如果匹配上,返回的是數(shù)組
否則, null
3)str.replace('str1','str2');
//只替換第一個(gè)
4)regx.test(str); // 能匹配上,返回true,否則 返回false
4、規(guī)則
1)方括號(hào):方括號(hào)用于查找某個(gè)范圍的字符
1.1)或 [123] 1或2或3
1.2)范圍 [a-zA-Z0-9]
1.3)排除 [^]
2)修飾:
行首,行尾 ^$
. 點(diǎn) 所有的字符
3)量詞:
{}
{n} n個(gè)
{n,m} 最少n個(gè),最多m個(gè)
{n,} 最少n個(gè),最多不限
{0,1} 最少0個(gè),最多 1 個(gè) ----- ? --可有可無(wú)
{1,} 最少1個(gè),最多不限 ----- +
{0,} 最少0個(gè),最多不限 ----- *
3)轉(zhuǎn)義:
\n 換行
\d 數(shù)字
\
\\ \
\w 字母,數(shù)字,下劃線_
\d 數(shù)字
\s 空白 tab 空格 換行
\W \D \S 是與小寫(xiě)字母相反的
eg:
1) 匹配 固定電話(huà)
規(guī)則:
82323238
5727323
010-88234582
0476-5329878
如果有-,前面是3或4位數(shù)字
如果有-,后面是7或8位數(shù)字
一共不超過(guò)12位數(shù)字
如果有區(qū)號(hào),第一位是0
可以沒(méi)有區(qū)號(hào)
---------------------------------
分析:
區(qū)號(hào)可有可無(wú)
有區(qū)號(hào):
第一位是0
3-4位
-
電話(huà)部分:
第一位不是0 6-7位數(shù)字
---------------------------------
固定電話(huà):
var regx = /^(0[1-9]\d{1,2}\-)?[1-9]\d{6,7}$/;
---------------------------------
2)手機(jī)號(hào):
var regx = /^1[345789]\d{9}$/;
3)郵箱:
var regx = /^\w{1,30}@[0-9a-z\-]{2,20}(\.[a-z1-9]{2,3}){1,2}$/;
4)年齡:
var regx = /^(1[89])|([2-9]\d)|(100)$/;
二、ES6中新增的正則特性
ES6 改變了這種行為。如果RegExp構(gòu)造函數(shù)第一個(gè)參數(shù)是一個(gè)正則對(duì)象,那么可以使用第二個(gè)參數(shù)指定修飾符。而且,返回的正則表達(dá)式會(huì)忽略原有的正則表達(dá)式的修飾符,只使用新指定的修飾符。
new RegExp(/abc/ig, 'i').flags
// "i"
上面代碼中,原有正則對(duì)象的修飾符是ig,它會(huì)被第二個(gè)參數(shù)i覆蓋。
1、修飾符
1)u(新增)
Unicode 模式”,用來(lái)正確處理大于\uFFFF的 Unicode 字符。也就是說(shuō),會(huì)正確處理四個(gè)字節(jié)的 UTF-16 編碼。
/^\uD83D/u.test('\uD83D\uDC2A') // false
/^\uD83D/.test('\uD83D\uDC2A') // true
上面代碼中,\uD83D\uDC2A是一個(gè)四個(gè)字節(jié)的 UTF-16 編碼,代表一個(gè)字符。但是,ES5 不支持四個(gè)字節(jié)的 UTF-16 編碼,會(huì)將其識(shí)別為兩個(gè)字符,導(dǎo)致第二行代碼結(jié)果為true。加了u修飾符以后,ES6 就會(huì)識(shí)別其為一個(gè)字符,所以第一行代碼結(jié)果為false。
一旦加上u修飾符號(hào),就會(huì)修改下面這些正則表達(dá)式的行為。