最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全面詳解JS正則中匹配技巧及示例

 更新時(shí)間:2023年01月04日 11:25:35   作者:摸魚的湯姆  
這篇文章主要為大家介紹了全面詳解JS正則中匹配技巧及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在做項(xiàng)目的時(shí)候難免會(huì)遇到很多奇葩解析字符串的需求,簡(jiǎn)單的字符串通過(guò)內(nèi)置方法就能解析出來(lái),如果遇到復(fù)雜的就不好辦了,那我們?nèi)绾谓鉀Q復(fù)雜字符串解析那?只能借助正則幫我們解決這個(gè)問(wèn)題。下面介紹一些關(guān)于正則的案例和匹配技巧,廢話不多說(shuō),直接開(kāi)整。

組名匹配

()表示捕獲分組,() 會(huì)把每個(gè)分組里的匹配的值保存起來(lái)

//  將1999-12-31時(shí)間格式轉(zhuǎn)化為/1999/12/31 
const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/; 
const matchObj = RE_DATE.exec('1999-12-31');
const year = `${matchObj[1]}/${matchObj[2]}/${matchObj[3]}`; //1999/12/31 
  • 首先我們看一下(\d{4})
  • 其中()說(shuō)明這是一個(gè)組
  • 里面的\d{4}表示出現(xiàn)4次的數(shù)組,這樣后面的兩個(gè)組我想我不用介紹你就會(huì)知道了

具名組匹配

具名匹配使用?<GtoupsItemName> 這種形式給每一個(gè)組添加名稱

//  1999-12-31 -> 1999/12/31
const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const matchObj = RE_DATE.exec('1999-12-31');
const year = `${matchObj.groups.year}/${matchObj.groups.month}/${matchObj.groups.day}`;
console.log(year) // 1999/12/31
  • (?<year>\d{4}) 將第一個(gè)組命名為year,一次類推其他的也是如此。

關(guān)于組上一部分已經(jīng)介紹的很清楚,具名組就是在表達(dá)式的前面加入<組名稱>,然后按照matchObj.groups.year形式讀取

解構(gòu)賦值

let {groups: {one, two}} = /^(?<one>.*):(?<two>.*)$/u.exec('foo:bar');
console.log(one,two)  // foo,bar
  • ^(?<one>.*) 匹配到:左邊的任意字符串并賦值給one,:右邊的就是two了
  • 解構(gòu)賦值就是將匹配到的字符串,賦值到對(duì)應(yīng)的具名組上

替換

通過(guò)具名匹配,使用$<組名>引用具名組,倒到替換效果

// 1999-01-02 -> 02/01/1999
let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
let str = '1999-01-02'.replace(re, '$<day>/$<month>/$<year>')
console.log(str) // 02/01/1999

前瞻后顧

前瞻后顧根據(jù)匹配條件匹配出之前或者之后的內(nèi)容,具體分為下面幾種情況,當(dāng)然這幾種情況根據(jù)自己匹配字符串的情況去使用

// 前瞻:
A(?=B)   //查找B前面的A
// 后顧:
(?<=B)A   //查找B后面的A
// 負(fù)前瞻:
A(?!B)   //查找后面不是B的A
// 負(fù)后顧:
(?<!B)A   //查找前面不是B的A
  • url解析

https://open.weibanzhushou.com/open-api/chat/message/list?num=aa&key=123aa

最后輸出 num=aa&key=123aa

const reg1 = /(http|https)\:\/\/+(.+\?)(?=(\w))/g
let str = 'https://open.weibanzhushou.com/open-api/chat/message/list?num=aa&key=123aa';
str = str.replace(reg1,'')
console.log(str); // num=aa&key=123aa
  • (http|https) 協(xié)議匹配
  • \:\/\/特殊符號(hào)的轉(zhuǎn)義主要匹配://
  • +(.+\?)匹配url中path
  • (?=(\w)) 匹配url中參數(shù)前面是否符合1,2,3三點(diǎn)

捕獲分組

() 會(huì)把每個(gè)分組里的匹配的值保存起來(lái),使用$n(n是一個(gè)數(shù)字,表示第n個(gè)捕獲組的內(nèi)容)

  • 過(guò)濾html標(biāo)簽

str = " asdasd<p>aas</p>asd</br>asda<div>asad</div>asd";

// 最后輸出[' asdasd', 'aas', 'asd', 'asda', 'asad', 'asd ']

 const reg1 = /(\<|\<\/)\w{1,}\>/g; 
 // 等同于 /(\<|\<\/)\w*\>/g 
 // 等同于 /(\<|\<\/)\w+\>/g
    str = str.replace(reg1,'-'); 
    console.log(str.split('-')); //[' asdasd', 'aas', 'asd', 'asda', 'asad', 'asd ']
  • (\<|\<\/)將前半部分分為兩種情況,第一種是<,另外一種是</
  • \w{1,}\>匹配多次后半部分標(biāo)簽比如p>
  • 千分位分隔符 10000->10,000 ,關(guān)于分組中的$&的使用
const reg1 = /\d{1,3}(?=(\d{3}))/;
let num = '10000';
num = num.replace(reg1,'$&,');//10,000 

補(bǔ)充$&,&n知識(shí)點(diǎn)

  • $&

表示表示匹配到的字符串

const origin = 'abc1abc' 
const newStr = origin.replace(/\d/g, '<<$&>>');
// newStr = 'abc<<1>>abc
  • $n

索引是從1開(kāi)始. 如果不存在第 n個(gè)分組, 那么將會(huì)把匹配到到內(nèi)容替換為字面量. 比如不存在第3個(gè)分組, 就會(huì)用"$3"替換匹配到的內(nèi)容

  const origin = '2022-07-08' 
    const newStr = origin.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$1/$2/$3');
    console.log(newStr)

總結(jié)

上面就可以看出正則在我們JS中也很重要,有時(shí)候可能一個(gè)小問(wèn)題就需要用到,就像上面格式化時(shí)間,用到正則直接可以解決,但是也不排除正則是解析字符串的唯一方法,當(dāng)然每個(gè)人的想法不一樣,但是都需要自己去嘗試實(shí)現(xiàn)。

以上就是全面詳解JS正則中匹配技巧及示例的詳細(xì)內(nèi)容,更多關(guān)于JS正則匹配技巧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js與C#進(jìn)行時(shí)間戳轉(zhuǎn)換

    js與C#進(jìn)行時(shí)間戳轉(zhuǎn)換

    最近在做一個(gè)項(xiàng)目,需要JS時(shí)間戳轉(zhuǎn)成C#里的時(shí)間,再把C#里的時(shí)間戳轉(zhuǎn)成JS的時(shí)間,就仔細(xì)研究了下js與C#進(jìn)行轉(zhuǎn)換的注意要點(diǎn),這里記錄下來(lái),有需要的小伙伴自己拿走。
    2014-11-11
  • 基于layui的table插件進(jìn)行復(fù)選框聯(lián)動(dòng)功能的實(shí)現(xiàn)方法

    基于layui的table插件進(jìn)行復(fù)選框聯(lián)動(dòng)功能的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇基于layui的table插件進(jìn)行復(fù)選框聯(lián)動(dòng)功能的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • JavaScript實(shí)現(xiàn)移動(dòng)端拖動(dòng)元素

    JavaScript實(shí)現(xiàn)移動(dòng)端拖動(dòng)元素

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)移動(dòng)端拖動(dòng)元素,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • webpack 處理CSS資源的實(shí)現(xiàn)

    webpack 處理CSS資源的實(shí)現(xiàn)

    這篇文章主要介紹了webpack 處理CSS資源的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 為什么JavaScript中0.1 + 0.2 != 0.3

    為什么JavaScript中0.1 + 0.2 != 0.3

    這篇文章主要給大家介紹了關(guān)于為什么JavaScript中0.1 + 0.2 != 0.3的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 原生JavaScript實(shí)現(xiàn)Tooltip浮動(dòng)提示框特效

    原生JavaScript實(shí)現(xiàn)Tooltip浮動(dòng)提示框特效

    這篇文章主要為大家詳細(xì)介紹了原生JavaScript設(shè)計(jì)和實(shí)現(xiàn)Tooltip浮動(dòng)提示框特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 微信小程序開(kāi)發(fā)之實(shí)現(xiàn)別踩白塊游戲

    微信小程序開(kāi)發(fā)之實(shí)現(xiàn)別踩白塊游戲

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)微信小程序開(kāi)發(fā)一個(gè)簡(jiǎn)單的別踩白塊游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以和小編一起學(xué)習(xí)一下
    2023-02-02
  • 淺談JavaScript工具鏈不完全指南

    淺談JavaScript工具鏈不完全指南

    經(jīng)過(guò)這么多年的發(fā)展,JavaScript 早已經(jīng)不是當(dāng)年那個(gè)不太起眼的腳本語(yǔ)言。如今的 JavaScript 可以說(shuō)是風(fēng)光無(wú)限,在 Web 前端、移動(dòng)端、服務(wù)端甚至物聯(lián)網(wǎng)設(shè)備上都大展身手,到處都有它的身影。
    2021-05-05
  • Javascript和jQuery的深淺拷貝詳解

    Javascript和jQuery的深淺拷貝詳解

    這篇文章主要為大家詳細(xì)介紹了Javascript和jQuery的深淺拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • webpack打包優(yōu)化的幾個(gè)方法總結(jié)

    webpack打包優(yōu)化的幾個(gè)方法總結(jié)

    這篇文章主要介紹了webpack打包優(yōu)化的幾個(gè)方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

新泰市| 东安县| 平泉县| 尖扎县| 环江| 山阳县| 鄄城县| 岢岚县| 荔浦县| 泾源县| 乳源| 康保县| 根河市| 肥西县| 文昌市| 双流县| 陆良县| 泸定县| 永胜县| 遂宁市| 清新县| 浦北县| 黄陵县| 鄂温| 张北县| 桂阳县| 寿宁县| 诏安县| 阿拉善右旗| 宁海县| 鄂尔多斯市| 伊通| 白城市| 通道| 荥阳市| 高尔夫| 临潭县| 临高县| 丰原市| 四川省| 阜城县|