隨緣到了JS正則表達(dá)式,就來(lái)寫(xiě)點(diǎn)!(有不對(duì)的地方請(qǐng)指出來(lái))

所有的語(yǔ)言的正則表達(dá)式還有一些更強(qiáng)大的功能,比如

1、子表達(dá)式的索引和回溯

2、回溯引用在replace中的應(yīng)用

3、(肯定 | 否定)向前查找

4、(肯定 | 否定)向后查找 ===> JS不支持

5、條件查找 ===>JS不支持 Orz......

下面說(shuō)的均是JS的正則


一、子表達(dá)式的索引和回溯

JS中用括號(hào)括起來(lái)的大部分都可以成為一個(gè)子表達(dá)式(按照先后順序從1到n),而整個(gè)正則則是第0個(gè)子表達(dá)式

例如:var reg = /(好).*?\1/g;? ===>? 這里的“(好)”就是正個(gè)reg的 ?第一個(gè) ?子表達(dá)式,后面的“\1”就代表著前面的第一個(gè)子表達(dá)式,因?yàn)槭?1 嘛!

讓我們來(lái)匹配點(diǎn)什么:var str ="你好嗎?我很好!";

str.match(reg) ===> 返回結(jié)果:["好嗎?我很好"]

這里看到了,從第一個(gè)“好”,匹配到第二個(gè)好,這也就是我理解的子表達(dá)式的索引和回溯(我是這么叫它的)。

補(bǔ)一句,reg里面的“*?”是懶惰匹配,就是盡量少的匹配,懶惰匹配的原理就是在修飾符的后面幾個(gè)“?”,因?yàn)椤??”是匹?次或者1次嘛,so你懂得。

二、回溯引用在replace中的應(yīng)用

直接從簡(jiǎn)單的例子入手:

正則表達(dá)式:var reg = /-(\w)/g;

匹配str:var str ="my-love";

輸出:console.log(str.replace(reg,function($0,$1) {

console.log($0);

console.log($1);

}));

結(jié)果如下圖:


控制臺(tái)結(jié)果


個(gè)人分析圖如下:


分析圖


相信看了上面的分析,大家也能明白個(gè)七八,只要在replace中的函數(shù)中 return $1.toLowerCase(),是不是就完成了將帶橫線(xiàn)的字符轉(zhuǎn)為駝峰字符的功能?大家試一下就會(huì)了解。

這里面的“$1”我理解為正則里面的“/1”,也就是說(shuō)和“/1”的思路是差不多的,只不過(guò)應(yīng)該用到replace中,不過(guò)好像也只能用到replace中,其他方面我還沒(méi)接觸到。

三、(肯定 | 否定)向前查找

先問(wèn)大家一個(gè)問(wèn)題,如果給大家一段話(huà),里面有數(shù)字、中文和40$,要求匹配$前面的數(shù)字并且不能匹配后面沒(méi)有$符號(hào)的數(shù)字,大家會(huì)如何匹配呢?(先想一想)

就上面的問(wèn)題來(lái)舉例子,從例子入手:

匹配的str:var str ="我出50$買(mǎi)靈能100%第二季";

正則表達(dá)式:var reg = /\d+(?=\$)/g;

輸出:console.log(str.match(reg));

結(jié)果為:["50"]

這個(gè)結(jié)果就是我們想要的,而“(?=\$)”就是所謂的(肯定)正向查找。

我的理解是:“(?=\$)”的“?=”的“=”后面是要匹配的關(guān)鍵字,如果匹配到,就用“\d+”(也就是(?=\$)之前的)來(lái)匹配關(guān)鍵字之前的字符串或者其他。但是最后不會(huì)包含這個(gè)關(guān)鍵字哦?,F(xiàn)在看起來(lái)是不是特別貼合這個(gè)名字“向前查找”。

那么(否定)向前查找呢?

還是那個(gè)例子只不過(guò)把正則表達(dá)式換一下

正則表達(dá)式:var reg = /\d+(?!\$)/g; ===> 注意 這里 將“?=”變?yōu)椤?!”

返回結(jié)果:["5", "100"]

為什么是這個(gè)結(jié)果呢?因?yàn)槭欠穸ǖ?,也就是取反,從?!”中的“!”可以看出,匹配的是 數(shù)字 加 $ 之外的數(shù)字,那么為什么會(huì)返回5呢,這個(gè)我猜想是懶惰匹配的,所以會(huì)匹配“0$”,將前面的“5”拋棄了,并且返回了被匹配字符串的所以其他數(shù)字,就是這樣喵。

四、(肯定 | 否定)向后查找 和 條件查找不支持,所以就沒(méi)必要說(shuō)了。有興趣的可以自己去看看。


以上內(nèi)容均屬個(gè)人簡(jiǎn)潔,不對(duì)的地方望指出,最后祝大家在前端之路上越來(lái)越順利。

沒(méi)有了~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,268評(píng)論 0 20
  • 前言 作為一個(gè)程序員,要出去裝逼,手中必備的技能就是正則表達(dá)式。程序員的正則表達(dá)式,醫(yī)生的處方和道士的鬼畫(huà)符,都是...
    Layzimo閱讀 690評(píng)論 0 6
  • RegExp是正則表達(dá)式的縮寫(xiě)正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。 正則的定義方法...
    饑人谷_廖珍閱讀 397評(píng)論 0 1
  • 《習(xí)慣的力量》 [美] 查爾斯·都希格 這本書(shū)之前,看了一點(diǎn),感覺(jué)很受益,可是看見(jiàn)今天的分享內(nèi)容,我卻不知道該說(shuō)什...
    映月黑珍珠閱讀 227評(píng)論 3 2
  • 今天是陰歷的10月初二,是祭奠先人的重要日子。以前知道給另一個(gè)世界的親人送錢(qián)送吃要遵循早清明,晚十月一,意思就是清...
    慧眼識(shí)魚(yú)閱讀 1,458評(píng)論 2 7

友情鏈接更多精彩內(nèi)容