成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS正則表達(dá)式入門,看這篇就夠了

wenzi / 2023人閱讀

摘要:如果遇到非常的復(fù)雜的匹配,正則表達(dá)式的優(yōu)勢(shì)就更加明顯了。關(guān)于正則表達(dá)式書寫規(guī)則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達(dá)式匹配的子串,并返回替換后的字符串。結(jié)語正則表達(dá)式并不難,懂了其中的套路之后,一切都變得簡(jiǎn)單了。

前言

在正文開始前,先說說正則表達(dá)式是什么,為什么要用正則表達(dá)式?正則表達(dá)式在我個(gè)人看來就是一個(gè)瀏覽器可以識(shí)別的規(guī)則,有了這個(gè)規(guī)則,瀏覽器就可以幫我們判斷某些字符是否符合我們的要求。但是,我們?yōu)槭裁匆褂谜齽t表達(dá)式呢?下面我們就看一下下面這個(gè)業(yè)務(wù)場(chǎng)景。

驗(yàn)證QQ號(hào)的合法性
/**
*合法qq號(hào)規(guī)則:1、5-15位;2、全是數(shù)字;3、不以0開頭
*/

//1.在不使用正則表達(dá)式的時(shí)候,我們可能會(huì)這樣判斷QQ號(hào)的合法性
var qq="6666666a6666";         
if(qq.length>=5&&qq.length<=15&&!isNaN(qq)&&qq.charCodeAt(0)!=48){
        alert("QQ合法");
    }else{
        alert("QQ不合法")
    }
    
//2.使用正則表達(dá)式
    var qq="066336";
    var reg=/^[1-9][0-9]{4,14}$/;
    if(reg.test(qq)){
        alert("QQ合法");
    }else{
        alert("QQ不合法");
    }

從上面這個(gè)例子可以看出來使用了正則表達(dá)式的時(shí)候,我們的代碼量變少了,而且比較直觀。如果遇到非常的復(fù)雜的匹配,正則表達(dá)式的優(yōu)勢(shì)就更加明顯了。

使用方法

接著上面,我想先說說JS正則表達(dá)式是如何使用的。非常簡(jiǎn)單,只有兩步而已。

第一步:定義一個(gè)正則表達(dá)式

定義正則表達(dá)式有兩種方法,第一種通過"/正則表達(dá)式/修飾符"這種形式直接寫出來,第二種通過“new RegExp("正則表達(dá)式","修飾符)"”創(chuàng)建一個(gè)RegExp對(duì)象。其中修飾符為可選項(xiàng),有三個(gè)取值g:全局匹配;i:不區(qū)分大小寫;m:多行匹配

//第一種“/正則表達(dá)式/”
    var reg1=/hello w{3,12}/g;
//第二種new RegExp("正則表達(dá)式")
    var reg2=new RegExp("hello w{3,12}","g");
    
/**
*這里需要注意的是,第二種方法中由于字符串轉(zhuǎn)義問題,""代表""。
*/   

上面這個(gè)定義方法,其實(shí)還有一個(gè)可選參數(shù)(修飾符),這里我們先不深入探究,后面我們?cè)偌?xì)說。

說到RegExp對(duì)象,下面要說一下RegExp對(duì)象自帶的屬性,并不復(fù)雜,這里我就列一下,不展開說了。

屬性 描述
global RegExp 對(duì)象是否具有標(biāo)志 g。
ignoreCase RegExp 對(duì)象是否具有標(biāo)志 i。
lastIndex 一個(gè)整數(shù),標(biāo)示開始下一次匹配的字符位置。
multiline RegExp 對(duì)象是否具有標(biāo)志 m。
source 正則表達(dá)式的源文本。
第二步:調(diào)用RegExp對(duì)象中的方法

RegExp對(duì)象給我們提供了三種方法供我們使用,分別是test()、exec()和compile()。下面具體說一下這三個(gè)方法的用處。

1.test()

檢索字符串中指定的值。返回 true 或 false。這個(gè)是我們平時(shí)最常用的方法。

 var reg=/hello w{3,12}/;
 alert(reg.test("hello js"));//false
 alert(reg.test("hello javascript"));//true
2.exec()

檢索字符串中指定的值。匹配成功返回一個(gè)數(shù)組,匹配失敗返回null。

var reg=/hello/;
console.log(reg.exec("hellojs"));//["hello"]
console.log(reg.exec("javascript"));//null
3.compile()

compile() 方法用于改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個(gè)參數(shù)。

var reg=/hello/;
console.log(reg.exec("hellojs"));//["hello"]
reg.compile("Hello");
console.log(reg.exec("hellojs"));//null
reg.compile("Hello","i");
console.log(reg.exec("hellojs"));//["hello"]
如何寫一個(gè)正則表達(dá)式

第一次接觸正則表達(dá)式同學(xué)們,可能被這個(gè)正則表達(dá)式的規(guī)則弄得迷迷糊糊的,根本無從下手。小編我第一次學(xué)這個(gè)正則表達(dá)式的時(shí)候,也是稀里糊涂,什么元字符、量詞完全不知道什么東西,云里霧里的。后面小編細(xì)細(xì)研究了一下,總結(jié)一套方法,希望可以幫助大家。

關(guān)于正則表達(dá)式書寫規(guī)則,可查看w3school,上面說的很清楚了,我就不貼出來了。我就闡述一下我寫正則表達(dá)式的思路。

其實(shí)正則表達(dá)式都可以拆成一個(gè)或多個(gè)(取值范圍+量詞)這樣的組合。針對(duì)每個(gè)組合我們根據(jù)JS正則表達(dá)式的規(guī)則翻譯一遍,然后將每個(gè)組合重新拼接一下就好了。下面我們舉個(gè)例子來試一下,看看這個(gè)方法行不行。

驗(yàn)證QQ號(hào)的合法性

合法qq號(hào)規(guī)則:1、5-15位;2、全是數(shù)字;3、不以0開頭

第一步:拆成(取值范圍+量詞)這樣的組合

根據(jù)QQ號(hào)的驗(yàn)證規(guī)則,我們可以拆成兩個(gè)(取值范圍+量詞)的組合。分別是:

1.(1~9的數(shù)字,1個(gè));2.(0~9的數(shù)字,4~14個(gè))
第二步:根據(jù)正則表達(dá)式規(guī)則翻譯(取值范圍+量詞)
1.(1~9的數(shù)字,1個(gè))     =>   [1-9]{1}或者[1-9]
2.(0~9的數(shù)字,4~14個(gè))  =>   [0-9]{4,14}
第三步:將翻譯好的(取值范圍+量詞)組合進(jìn)行拼接

初學(xué)者可能在拼接這一步會(huì)犯一個(gè)錯(cuò)誤,可能會(huì)組合拼接成這個(gè)樣子/[1-9]{1}[0-9]{4,14}/或者簡(jiǎn)寫翻譯成/[1-9] [0-9]{4,14}/這些都不對(duì)的。調(diào)用test()方法的時(shí)候,你會(huì)發(fā)現(xiàn)只要一段字符串中有符合正則表達(dá)式的字符串片段都會(huì)返回true,童鞋們可以試一下。

var reg=/[1-9][0-9]{4,14}/;
alert(reg.test("0589563"));
//true,雖然有0,但是"589563"片段符合
alert(reg.test("168876726736788999"));
//true,這個(gè)字符串長(zhǎng)度超出15位,達(dá)到18位,但是有符合的字符串片段

正確的寫法應(yīng)該是這樣的:

/^[1-9][0-9]{4,14}$/(用^和$指定起止位置)

下面我們看一個(gè)復(fù)雜點(diǎn)的例子:

驗(yàn)證國內(nèi)電話號(hào)碼

0555-6581752、021-86128488

第一步:拆成(取值范圍+量詞)這樣的組合

這里會(huì)拆成兩個(gè)大組合:

1、(數(shù)字0,1個(gè))+(數(shù)字0~9,3個(gè))+("-",1個(gè))+(數(shù)字1~9,1個(gè))+(數(shù)0~9,6個(gè))
2、(數(shù)字0,1個(gè))+(數(shù)字0~9,2個(gè))+("-",1個(gè))+(數(shù)字1~9,1個(gè))+(數(shù)0~9,7個(gè))
第二步:根據(jù)正則表達(dá)式規(guī)則翻譯(取值范圍+量詞)
1、([0-0],{1})+([0-9],{3})+"-"+([1,9],{1})+([0,9],{6})
2、([0-0],{1})+([0-9],{2})+"-"+([1,9],{1})+([0,9],{7})
第三步:將翻譯好的(取值范圍+量詞)組合進(jìn)行拼接

這里我們先拼接一個(gè)大組合,然后再將大組合拼接起來

1、0[0-9]{3}-[1-9][0-9]{6}
2、0[0-9]{2}-[1-9][0-9]{7}

最后拼接為:

/(^0[0-9]{3}-[1-9][0-9]{6}$)|(^0[0-9]{2}-[1-9][0-9]{7}$)/
正則表達(dá)式拓展

除了RegExp對(duì)象提供方法之外,String對(duì)象也提供了四個(gè)方法來使用正則表達(dá)式。

1.match()

在字符串內(nèi)檢索指定的值,匹配成功返回存放匹配結(jié)果的數(shù)組,否則返回null。這里需要注意的一點(diǎn)事,如果沒有設(shè)置全局匹配g,返回的數(shù)組只存第一個(gè)成功匹配的值。

var reg1=/javascript/i;
var reg2=/javascript/ig;
console.log("hello Javascript Javascript Javascript".match(reg1));
//["Javascript"]
console.log("hello Javascript Javascript Javascript".match(reg2));
//["Javascript","Javascript","Javascript"]
2.search()

在字符串內(nèi)檢索指定的值,匹配成功返回第一個(gè)匹配成功的字符串片段開始的位置,否則返回-1。

var reg=/javascript/i;
console.log("hello Javascript Javascript Javascript".search(reg));//6
3.replace()

替換與正則表達(dá)式匹配的子串,并返回替換后的字符串。在不設(shè)置全局匹配g的時(shí)候,只替換第一個(gè)匹配成功的字符串片段。

var reg1=/javascript/i;
var reg2=/javascript/ig;
console.log("hello Javascript Javascript Javascript".replace(reg1,"js"));
//hello js Javascript Javascript
console.log("hello Javascript Javascript Javascript".replace(reg2,"js"));
//hello js js js
4.split()

把一個(gè)字符串分割成字符串?dāng)?shù)組。

var reg=/1[2,3]8/;
console.log("hello128Javascript138Javascript178Javascript".split(reg));
//["hello","Javascript","Javascript178Javascript"]
結(jié)語

正則表達(dá)式并不難,懂了其中的套路之后,一切都變得簡(jiǎn)單了。在最后我想說點(diǎn)題外話,網(wǎng)上不乏一些文章記錄一些常用的正則表達(dá)式,然后新手前端在使用正則表達(dá)式的時(shí)候都會(huì)直接拿來就用。在這里我想說一下自己的看法,這些所謂記錄常用的正則表達(dá)式文章并非完全都是正確的,有不少都是錯(cuò)的。所以同學(xué)們?cè)谌蘸笫褂玫倪^程盡量自己寫正則表達(dá)式,實(shí)在不會(huì)了可以去參考一下,但真的不要照搬下來。咱不說這種會(huì)影響自己成長(zhǎng)的話,咱就說你抄的一定都是對(duì)的嗎?多思考一下,總沒有壞處。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82888.html

相關(guān)文章

  • ES6入門,看這篇就夠了

    摘要:從入門到放棄是什么,黑歷史,不講,自己百度去。類你沒有看錯(cuò),這里面的就沒有問題的。之前我們用過,和有了,再也不用這兩個(gè)貨了。一個(gè)函數(shù),可以遍歷狀態(tài)感覺就是狀態(tài)機(jī),好吧不說了再說就懵逼了。 ES6從入門到放棄 1.ES6是什么,黑歷史,不講,自己百度去。 2.在瀏覽器中如何使用? 1.babel babeljs.io在線編譯 2.traceur-----Google出的編譯器,把E...

    lewinlee 評(píng)論0 收藏0
  • 平時(shí)積累的前端資源,持續(xù)更新中。。。

    本文收集學(xué)習(xí)過程中使用到的資源。 持續(xù)更新中…… 項(xiàng)目地址 https://github.com/abc-club/f... 目錄 vue react react-native Weex typescript Taro nodejs 常用庫 css js es6 移動(dòng)端 微信公眾號(hào) 小程序 webpack GraphQL 性能與監(jiān)控 高質(zhì)文章 趨勢(shì) 動(dòng)效 數(shù)據(jù)結(jié)構(gòu)與算法 js core 代碼規(guī)范...

    acrazing 評(píng)論0 收藏0
  • 監(jiān)聽器入門看這篇就夠了

    摘要:但監(jiān)聽器要在事件源上實(shí)現(xiàn)接口也就是說,直接用一個(gè)類實(shí)現(xiàn)和接口是監(jiān)聽不到內(nèi)對(duì)象的變化的。 什么是監(jiān)聽器 監(jiān)聽器就是一個(gè)實(shí)現(xiàn)特定接口的普通java程序,這個(gè)程序?qū)iT用于監(jiān)聽另一個(gè)java對(duì)象的方法調(diào)用或?qū)傩愿淖?,?dāng)被監(jiān)聽對(duì)象發(fā)生上述事件后,監(jiān)聽器某個(gè)方法將立即被執(zhí)行。。 為什么我們要使用監(jiān)聽器? 監(jiān)聽器可以用來檢測(cè)網(wǎng)站的在線人數(shù),統(tǒng)計(jì)網(wǎng)站的訪問量等等! 監(jiān)聽器組件 監(jiān)聽器涉及三個(gè)組件:事件...

    eechen 評(píng)論0 收藏0
  • Python 3 入門,看這篇就夠了

    摘要:縮進(jìn)不一致,會(huì)導(dǎo)致運(yùn)行錯(cuò)誤。變量變量在使用前必須先定義即賦予變量一個(gè)值,否則會(huì)報(bào)錯(cuò)數(shù)據(jù)類型布爾只有和兩個(gè)值,表示真或假。 簡(jiǎn)介 Python 是一種高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語言。Python 由 Guido van Rossum 于 1989 年底在荷蘭國家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所發(fā)明,第一個(gè)公開發(fā)行版發(fā)行于 1991 年。 特點(diǎn) 易于學(xué)習(xí):Python ...

    Shimmer 評(píng)論0 收藏0
  • Lombok 看這篇就夠了

    摘要:注解在類上為類提供一個(gè)全參的構(gòu)造方法,加了這個(gè)注解后,類中不提供默認(rèn)構(gòu)造方法了。這個(gè)注解用在類上,使用類中所有帶有注解的或者帶有修飾的成員變量生成對(duì)應(yīng)的構(gòu)造方法。 轉(zhuǎn)載請(qǐng)注明原創(chuàng)地址:http://www.54tianzhisheng.cn/2018/01/07/lombok/ showImg(http://ohfk1r827.bkt.clouddn.com/blog/180107/7...

    LeanCloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<