国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

淺入正則(一)

zhaofeihao / 1137人閱讀

摘要:例在第行中,結果為,因為第四行中的匹配成功后,為,也就是下一次是從開始匹配,所以匹配失敗,返回,并把置為淺入正則二字符的含義和使用

正則表達式一直作為我的痛點,沒有系統的學習和了解,之前部門有本500多頁的書叫《精通正則表達式》,一直沒勇氣拿起來。到后來業務中需要正則的地方越來越多,不忍心老找人幫忙寫正則了。找了資料先看著,至少自己先入個門。

with (javascript)

實例化RegExp對象

實例化RegExp對象同實例化其他JavaScript內置對象一樣,分別有字面量和構造函數兩種方法:

var reg1 = /d/g;                    //全局匹配數字
var reg2 = new RegExp("D","g");    //全局匹配非數字
RegExp對象原型方法

類似Array/String/Function都有自己的原型方法,RexExp對象同樣有自己的原型方法。

test

不管正則6不6,test方法一定都會用:RegExpObject.test(string); string中是否含有RegExpObject中匹配的字符串片段,有則返回true,否則返回false

/d/g.test("abc");        //false
/d/g.test("123");        //true
exec

這個方法很強大,但是理解起來有點難,簡單說,用法是:RegExpObject.exec(string);這個和test一樣,返回值是返回一個數組或者null,也就是說RegExpObjectstring中成功匹配到了字符串片段,則返回一個數組,這個數組各項分別是:

[
    0: "與正則表達式匹配的文本",
    1: "與正則表達式第一個分組匹配的文本",    //分組就先理解為一個括號為一個分組
    2:" 與正則表達式第二個分組匹配的文本",
    3: "···以此類推"
]
//來個例子: 
var reg1 = /([a-zA-Z]d)+([u4e00-u9fa5])+/;
//匹配 (大小寫字母連著一個數字) 至少一次 (再連著漢字) 至少一次
var str1 = "a11B2老cd3李e45好";
var result = reg1.exec(str1);
console.log(result);                     //["B2老", "B2", "老"]

例子中正則匹配數字的結果是"B2老";所以結果數組中第一個元素為"B2老",第一個分組是(大小寫字母連著一個數字),第二個元素就是"B2",第二個分組是漢字,第三個元素就是"老"。同時,這里有幾個重點要劃:

返回結果的數組自帶另外兩個屬性:index:匹配成功字符串片段的起始index; input:存放被檢測的字符串,也就是例子中的str1;

如果整個正則沒有匹配結果,僅僅其中某個分組有匹配結果,則exec的返回值為null。所以test方法也可以使用RegExpObject.exec(string) != null;來替代;

如果其中某個分組有多個匹配結果,例如:我們str1改"a1B2老cd3李e45好";那么 (大小寫字母連著一個數字) 這個分組就有多個匹配結果,a1B2;那么返回到數組中的是最后一個匹配成功的結果,也就是B2;

如果正則是一個全局的正則表達式(global);那么返回值數組會首先取第一段匹配成功的結果輸出,然后第二次執行會取第二段,依次循環類推,例如:

var reg2 = /([a-zA-Z]d)+([u4e00-u9fa5])+/g;

//匹配 (大小寫字母連著一個數字) 至少一次 (再連著漢字) 至少一次
var str2 = "a11B2老cd3李e45好";
var result1 = reg2.exec(str2);
var result2 = reg2.exec(str2);
var result3 = reg2.exec(str2);

console.log(result1,result2,result3);

//輸出:
["B2老", "B2", "老"]        //index: 3
["d3李", "d3", "李"]        //index: 7
null
toString

方法同ObjecttoString方法;將RegExp對象轉為字符串。

var reg3 = /d/g;
var reg4 = new RegExp("d","g");
reg3.toString();            //"/d/g"
reg4.toString();            //"/d/g"
RegExp對象屬性

global: 只讀,簡寫g;被設置則表示全局搜索,即在字符串中查找到所有匹配條件的字符串片段,不設置的話匹配到第一個成功的即停止;

ignoreCase: 只讀,簡寫i;不區分大小寫;

multiline: 只讀,簡寫m;多行匹配,字符串中帶有換行符時,如果不設置i屬性,則只匹配第一行,設置后所有行均匹配且每行的開頭/結尾可以作為開頭/結尾被匹配(^/$);

source: 只讀,返回正則表達式的文本,簡單說,上例中的正則表達式/([a-zA-Z]d)+([u4e00-u9fa5])+/gim,去掉兩邊的斜杠和斜杠外的東西//gim,結果就是([a-zA-Z]d)+([u4e00-u9fa5])+

lastIndex: 讀寫,在全局正則表達式的前提下,上一次匹配成功的文本片段的最后一個字符之后一個文本的位置,也是下一次匹配的起始位置,初始為0,無匹配結果時置為0。例:

var reg5 = /d/g;
var str5 = "a1bc2e3fj";
console.log(reg5.lastIndex);                         //0
console.log(reg5.test(str5), reg5.lastIndex);        //true 2
console.log(reg5.test(str5), reg5.lastIndex);        //true 5
console.log(reg5.test(str5), reg5.lastIndex);        //true 7
console.log(reg5.test(str5), reg5.lastIndex);        //false 0
console.log(reg5.test(str5), reg5.lastIndex);        //true 2
console.log(reg5.test(str5), reg5.lastIndex);        //true 5

在第5行中,結果為false,因為第四行中的匹配成功后,lastIndex為7,也就是下一次是從f開始匹配,所以匹配失敗,返回false,并把lastIndex置為0

淺入正則(二):字符的含義和使用

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83868.html

相關文章

  • 淺入正則(二)

    摘要:前一篇淺入正則一了解了實例化一個對象的原型方法的對象屬性這些基礎,大致知道正則怎么用,這一篇主要想了解一下正則怎么寫。 with (javascript) 前一篇淺入正則(一)了解了實例化一個RegExp對象、RegExp的原型方法、RegExp的對象屬性這些基礎,大致知道正則怎么用,這一篇主要想了解一下正則怎么寫。 元字符 元字符表隨便就查得到,但這是會寫正則最重要的基礎,這里簡單分...

    MRZYD 評論0 收藏0
  • js基礎常用知識點由淺入深整理篇

    摘要:因為同一時間,只能處理一個異步,這又牽扯到單線程問題了。然后控制臺默默打印了個目前前端,異步主要為前后端交互以及定時器,僅僅說前端,如果說的話,還有文件讀取等其他的方面會異步。 此篇文章完全按照我個人理解去寫。 1.何為JS 先說說js干啥的。不負責點說,js就是操作瀏覽器的。 有人可能說nodeJS,nodeJS嚴格意義上只能說是用的ES,因為他沒有dom ,也沒有bom。 簡單點說...

    Zack 評論0 收藏0
  • 淺入深laravel教程附錄1:全局助手函數之字符串部分

    摘要:一靜態屬性緩存部分由于每次正則替換費時,所以有個動物函數,框架使用靜態屬性保存,提高效率的意思是大駝峰式,這個函數是將轉換成的意思駱駝,這個函數是小駝峰格式,第一個字母是小寫字母轉換成的意思是蛇,很形象,整個身子都一樣粗,它只對中有大寫 一:靜態屬性緩存部分 由于每次正則替換費時,所以有4個動物函數,框架使用靜態屬性保存,提高效率 01:Str::studly($value)studl...

    sushi 評論0 收藏0
  • 【實踐】玩轉正則表達式+JS正則處理函數

    摘要:前言寫這篇文章不是空穴來風,最近一個禮拜寫了一個簡單的腳本,用來處理上千個文件,以便于在某些特定字符的周圍添加標記,先說一下我這個腳本使用場景主要是來識別中文具體做什么,之后會單獨寫一篇文章,此處只提該腳本作用,同時為不同的文件類型,包括, 前言 寫這篇文章不是空穴來風,最近一個禮拜寫了一個簡單的nodejs腳本,用來處理上千個文件,以便于在某些特定字符的周圍添加標記,先說一下我這個腳...

    DoINsiSt 評論0 收藏0
  • 淺入深地教你開發自己的 React Router v4

    摘要:也就是說通過我們自己構建來解釋是否是一個合適的路由抽象。首先,并不需要,因為如果路由中沒有給那么將會自動渲染。基本上我們的路由只要關心的變化并且返回相應的即可。為了解決這個問題,需要跟蹤每一條并且當路由發生改變的時候調用。 showImg(https://segmentfault.com/img/remote/1460000008803951?w=800&h=615); 作者:Tyl...

    alin 評論0 收藏0

發表評論

0條評論

zhaofeihao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<