es6語法 正則

正則 規(guī)則
正則表達式 規(guī)則表達式
Regular Expression
弄一個正則:
new RegExp('表達式',['選項']);

字符串上面有兩個方法:
str.search(expr或字符串) //查找,搜索
在str中找,找字符串或表達式expr匹配的內(nèi)容,如果找到的話,
就返回第1個出現(xiàn)的位置,如果找不到,就返回-1
-- indexOf

    var exp = new RegExp('A');
    str.search(exp);

str.match(expr或字符串);  //匹配
    在str中匹配,按expr或字符串來匹配,如果能匹配到,
    返回匹配結果的數(shù)組,如果匹配不到,返回 null
    
    match方法,通常是配合正則表達式來使用。

正則中的選項:

g   global  全局(在全局,在整個字符串中找,如果不加這個選項,那么只匹配一次)
var expr = new RegExp('A','g'); //在整個字符串中匹配 A

i   ignore  忽略大小寫

new RegExp('a','gi');   //選項可以寫在一起,并且沒有選后順序

正則的簡寫:

不簡寫:  var expr = new RegExp('a','gi');
簡寫:
    /表達式/選項
    var expr = /a/gi;

轉(zhuǎn)義:
字符串轉(zhuǎn)義: 換行 \n
\n 換行
\ 顯示一個
\\顯示兩個 \
正則里轉(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

    解決笨: 量詞

    正則里量詞:
        +   有一個或多個---  最少有1個,最多不限
        ?   有0個或1個 -- 最少有0個,最多1個  —— 有或沒有
        *   最少0個,最多不限 ——建議盡量少用,因為效率低

    var str = 'dss23 23fs fd2332s';
    str.match(/\d+/g);  --> 23,23,2332 
    
3、貪
    var str = 'dss234566778876555678 23fs fd2332s';
    str.match(/\d+/g);  

正則特性: 懶 笨 貪

敏感詞過濾:
思路:就是把一些預先設定好的詞匯,用
來代替
字符串的方法:
str.replace('要替換的東西','替換成什么');
let str = '我們國家真好';
str.replace('國家','
');
str.replace方法: 只能替換一次
*replace如果不配合正則使用,它就是一個廢物
str.replace('要替換的東西或正則','替換成什么');
str.replace('要替換的東西或正則','替換成什么字符串 或 自定義函數(shù)');
str.replace('a','b'); //把a替換成b了

        str.replace('a',function(s){
            //s  表示的就是每次匹配的結果
            //返回值 返回的是什么,就替換成什么
        });

正則中的或: |

小總結:
new RegExp(表達式,選項);
str.search
str.match
str.replace
懶 (會享受) 笨(萌) 貪(有追求)

正則中的修飾:
^ 行首 匹配的是一行第一個字符的前面
$ 行尾 匹配的是一行最后一個字符的后面

選項:
    g       全局
    i       忽略大小寫
    m       多行模式 multi-line

^   行首  
$   行尾
    
單行模式:匹配的整個字符串的開頭和結尾
多行模式:匹配的一行的開頭和結尾

選項:
g i m
/\d/gim
/\d/img
量詞:
{n} n個
{n,m} 最少n個,最多m個
{n,} 最少n個,最多不限
{0,1} 最少0個,最多1個—— ?
{0,} 最少0個,最多不限——*
{1,} 最少1個,最多不限——+
+ 最少1個,最多不限
* 最少0個,最多不限
? 最少0個,最多1個
正則中的 []:
1)或的關系
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 (大寫字母或小寫字母——所有字母)
[12-49] 1或 者2到4或者 9 (1,2,3,4,9)

年齡:滿18周歲  18-100歲
    18
    19
    20-99
    100
    /[18-100]/  ×
    
    把問題拆解,拆解一個一個的簡單問題(在這個例子,注意所有的東西都是字符)

    要求:  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     第一個字符是a
            第二個字符不能是 b,也不能是c
            第三個字符是d

轉(zhuǎn)義:
\d 表示所有數(shù)字
\w 字母、數(shù)字、下劃線
\s 空白 (空格 換行 tab)

\D  非數(shù)字
\W  不是 字母、數(shù)字、下劃線 _
\S  不是空白

\b  單詞邊界(任何可以分隔單詞的東西)
***還有好多自己去看

str.search()
str.match()

正則對象.test('字符串')

var reg = new RegExp('\d+','g');
reg.test('sds232')
--如果不能匹配 ,返回 true
--如果能匹配,返回false
reg.test()
——有一些嚴重性問題,不太嚴謹
用test,需要在表達式的前后,加 ^ $
在正則中,如果使用 或(|) ,那么一定要加括號——每個條件和整體都加括號

例1:
驗證手機號:
整體11位
第一位:1 1
第二位:3,4,5,7,8 [34578]
剩余部分: \d{9}

    1[34578]\d{9}

例2:
座機號
8723678
87232982
010-83232323
0423-3239325

    規(guī)則:
    
        區(qū)號          電話號
    
    區(qū)號:
        1)第1位                   0
        2)第2位不是0                [1-9]
        2)第3位或第4位是數(shù)字        \d{1,2}
        4)- 1個
        
        整體上看,可有可無           ?
    電話:
        第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

    分為幾個部分:
        郵箱的名字(@前面):
            字母,數(shù)字,下劃線,最長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}

關于字符串的幾個小方法:
indexOf lastIndexOf charAt substring toUpperCase toLowerCase split match search
1、去除首尾空格
jquery: $.trim('| s sds fds |')

原生:  str.trim()  ——   不支持低級瀏覽器

/^\s+|\s+$/g

2、ES6 判斷是否由小串開始
str.startsWith('abc'); 不兼容IE系
自己用正則實現(xiàn): /^abc/
3、ES6 判斷是否由小串結尾
str.endsWith('bd'); 不兼容IE系
自己用正則實現(xiàn):/bd$/

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內(nèi)容