正則 規(guī)則
正則表達(dá)式 規(guī)則表達(dá)式
Regular Expression
弄一個(gè)正則:
new RegExp('表達(dá)式',['選項(xiàng)']);
字符串上面有兩個(gè)方法:
str.search(expr或字符串) //查找,搜索
在str中找,找字符串或表達(dá)式expr匹配的內(nèi)容,如果找到的話(huà),
就返回第1個(gè)出現(xiàn)的位置,如果找不到,就返回-1
-- indexOf
var exp = new RegExp('A');
str.search(exp);
str.match(expr或字符串); //匹配
在str中匹配,按expr或字符串來(lái)匹配,如果能匹配到,
返回匹配結(jié)果的數(shù)組,如果匹配不到,返回 null
match方法,通常是配合正則表達(dá)式來(lái)使用。
正則中的選項(xiàng):
g global 全局(在全局,在整個(gè)字符串中找,如果不加這個(gè)選項(xiàng),那么只匹配一次)
var expr = new RegExp('A','g'); //在整個(gè)字符串中匹配 A
i ignore 忽略大小寫(xiě)
new RegExp('a','gi'); //選項(xiàng)可以寫(xiě)在一起,并且沒(méi)有選后順序
正則的簡(jiǎn)寫(xiě):
不簡(jiǎn)寫(xiě): var expr = new RegExp('a','gi');
簡(jiǎn)寫(xiě):
/表達(dá)式/選項(xiàng)
var expr = /a/gi;
轉(zhuǎn)義:
字符串轉(zhuǎn)義: 換行 \n
\n 換行
\ 顯示一個(gè)
\\顯示兩個(gè) \
正則里轉(zhuǎn)義:
\d 數(shù)字
正則的特性:
1、懶 g
var str = 'sdfd2332';
str.match(/\d/) --> 2
2、笨
var str = 'dss23 23fs fd2332s';
str.match(/\d/g); --> 2,3,2,3,2,3,3,2
解決笨: 量詞
正則里量詞:
+ 有一個(gè)或多個(gè)--- 最少有1個(gè),最多不限
? 有0個(gè)或1個(gè) -- 最少有0個(gè),最多1個(gè) —— 有或沒(méi)有
* 最少0個(gè),最多不限 ——建議盡量少用,因?yàn)樾实?
var str = 'dss23 23fs fd2332s';
str.match(/\d+/g); --> 23,23,2332
3、貪
var str = 'dss234566778876555678 23fs fd2332s';
str.match(/\d+/g);
正則特性: 懶 笨 貪
敏感詞過(guò)濾:好
思路:就是把一些預(yù)先設(shè)定好的詞匯,用來(lái)代替
字符串的方法:
str.replace('要替換的東西','替換成什么');
let str = '我們國(guó)家真好';
str.replace('國(guó)家','');
str.replace方法: 只能替換一次
*replace如果不配合正則使用,它就是一個(gè)廢物
str.replace('要替換的東西或正則','替換成什么');
str.replace('要替換的東西或正則','替換成什么字符串 或 自定義函數(shù)');
str.replace('a','b'); //把a(bǔ)替換成b了
str.replace('a',function(s){
//s 表示的就是每次匹配的結(jié)果
//返回值 返回的是什么,就替換成什么
});
正則中的或: |
小總結(jié):
new RegExp(表達(dá)式,選項(xiàng));
str.search
str.match
str.replace
懶 (會(huì)享受) 笨(萌) 貪(有追求)
正則中的修飾:
^ 行首 匹配的是一行第一個(gè)字符的前面
$ 行尾 匹配的是一行最后一個(gè)字符的后面
選項(xiàng):
g 全局
i 忽略大小寫(xiě)
m 多行模式 multi-line
^ 行首
$ 行尾
單行模式:匹配的整個(gè)字符串的開(kāi)頭和結(jié)尾
多行模式:匹配的一行的開(kāi)頭和結(jié)尾
選項(xiàng):
g i m
/\d/gim
/\d/img
量詞:
{n} n個(gè)
{n,m} 最少n個(gè),最多m個(gè)
{n,} 最少n個(gè),最多不限
{0,1} 最少0個(gè),最多1個(gè)—— ?
{0,} 最少0個(gè),最多不限——*
{1,} 最少1個(gè),最多不限——+
+ 最少1個(gè),最多不限
* 最少0個(gè),最多不限
? 最少0個(gè),最多1個(gè)
正則中的 []:
1)或的關(guān)系
a[bce]c abc acc aec
2)范圍 [-]
[0-9] 從0到9
[a-z] 從a到z
[A-Z] 從A到Z
[a-zA-Z] a到z 或者 A到Z (大寫(xiě)字母或小寫(xiě)字母——所有字母)
[12-49] 1或 者2到4或者 9 (1,2,3,4,9)
年齡:滿(mǎn)18周歲 18-100歲
18
19
20-99
100
/[18-100]/ ×
把問(wèn)題拆解,拆解一個(gè)一個(gè)的簡(jiǎn)單問(wèn)題(在這個(gè)例子,注意所有的東西都是字符)
要求: 18 19 20 21 ..... 100
解題:
18,19 : 1[89]
20-99: [2-9]\d
100: 100
(1[89]) | ([2-9]\d) | (100)
3)排除 [^]
排除[^xxx] ^ 后面的字符
a[^bc]d 第一個(gè)字符是a
第二個(gè)字符不能是 b,也不能是c
第三個(gè)字符是d
轉(zhuǎn)義:
\d 表示所有數(shù)字
\w 字母、數(shù)字、下劃線(xiàn)
\s 空白 (空格 換行 tab)
\D 非數(shù)字
\W 不是 字母、數(shù)字、下劃線(xiàn) _
\S 不是空白
\b 單詞邊界(任何可以分隔單詞的東西)
***還有好多自己去看
str.search()
str.match()
正則對(duì)象.test('字符串')
var reg = new RegExp('\d+','g');
reg.test('sds232')
--如果不能匹配 ,返回 true
--如果能匹配,返回false
reg.test()
——有一些嚴(yán)重性問(wèn)題,不太嚴(yán)謹(jǐn)
用test,需要在表達(dá)式的前后,加 ^ $
在正則中,如果使用 或(|) ,那么一定要加括號(hào)——每個(gè)條件和整體都加括號(hào)
例1:
驗(yàn)證手機(jī)號(hào):
整體11位
第一位:1 1
第二位:3,4,5,7,8 [34578]
剩余部分: \d{9}
1[34578]\d{9}
例2:
座機(jī)號(hào)
8723678
87232982
010-83232323
0423-3239325
規(guī)則:
區(qū)號(hào) 電話(huà)號(hào)
區(qū)號(hào):
1)第1位 0
2)第2位不是0 [1-9]
2)第3位或第4位是數(shù)字 \d{1,2}
4)- 1個(gè)
整體上看,可有可無(wú) ?
電話(huà):
第1位不是0 [1-9]
6到7位數(shù)字 \d{6,7}
合: (0[1-9]\d{1,2}\-)?[1-9]\d{6,7})
例3:
郵箱:
zhanghaibin@zhinengshe.com
zhang@sina.com.cn
6181742@qq.com
zhang_1234@sohu.com
分為幾個(gè)部分:
郵箱的名字(@前面):
字母,數(shù)字,下劃線(xiàn),最長(zhǎng)20位
\w{1,20}
@
域名:
字母,數(shù)字,-
[a-zA-Z0-9\-]{1,10}
域名后綴:
.com
.cn
.com.cn
(\.[a-zA-Z]{2,3}){1,2}
合:\w{1,20}@[a-zA-Z0-9\-]{1,10}(\.[a-zA-Z]{2,3}){1,2}
關(guān)于字符串的幾個(gè)小方法:
indexOf lastIndexOf charAt substring toUpperCase toLowerCase split match search
1、去除首尾空格
jquery: $.trim('| s sds fds |')
原生: str.trim() —— 不支持低級(jí)瀏覽器
/^\s+|\s+$/g
2、ES6 判斷是否由小串開(kāi)始
str.startsWith('abc'); 不兼容IE系
自己用正則實(shí)現(xiàn): /^abc/
3、ES6 判斷是否由小串結(jié)尾
str.endsWith('bd'); 不兼容IE系
自己用正則實(shí)現(xiàn):/bd$/