隨緣到了JS正則表達(dá)式,就來寫點(diǎn)!(有不對的地方請指出來)

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

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

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

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

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

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

下面說的均是JS的正則


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

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

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

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

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

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

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

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

直接從簡單的例子入手:

正則表達(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é)果如下圖:


控制臺結(jié)果


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


分析圖


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

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

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

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

就上面的問題來舉例子,從例子入手:

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

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

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

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

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

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

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

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

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

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

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

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


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

沒有了~~~

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

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

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

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