精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript 正則深入以及十個非常有意思的正則實戰

開發 前端
熟悉我的朋友可能會知道,我一向是不寫熱點的。為什么不寫呢?是因為我不關注熱點嗎?其實也不是。有些事件我還是很關注的,也確實有不少想法和觀點。

[[433387]]

前言

熟悉我的朋友可能會知道,我一向是不寫熱點的。為什么不寫呢?是因為我不關注熱點嗎?其實也不是。有些事件我還是很關注的,也確實有不少想法和觀點。但我一直奉行一個原則,就是:要做有生命力的內容。

對于前端工程師來說, 正則表達式也許是javascript語言中最晦澀難懂的, 但是也往往是最簡潔的.工作中遇到的很多問題,諸如搜索,查找, 高亮關鍵字等都可以使用正則輕松解決,所以有句話說的好:

正則用的好, 加班遠離我.

今天筆者就復盤一下javascript正則表達式的一些使用技巧和高級API, 并通過幾個實際的案例,來展現正則表達式的魅力.如果大家覺得正則表達式理解起來很麻煩,也可以使用如下在線網站, 只需要輸入你的正則表達式, 它就能以圖形的方式將你的正則展示出來:

你將收獲

  • 模式匹配的用法(x)
  • 非捕獲括號的模式匹配(?:x)
  • 先行斷言x(?=y)
  • 后行斷言(?<=y)x
  • 正向否定查找x(?!y)
  • 反向否定查找(?
  • 字符集合和反向字符集合的用法[xyz]/[^xyz]
  • 詞邊界和非單詞邊界匹配/b/B
  • 空白字符/非空白字符匹配/s/S
  • 單字字符/非單字字符匹配/w/W
  • 正則10大應用案例

正文

對于正則的基本用法筆者這里就不總結了,這里重點介紹一些比較有用且難懂的知識點.在最后筆者會寫10個經典的正則案例, 供大家學習參考, 或者在工作中直接使用.

以上幾點應用筆者在下文中會寫幾個例子來講解.

模式匹配的用法(x)

模式匹配主要用來匹配某一類字符串并記住匹配項.

案例:

  1. let str = 'xuxi is xuxi is' 
  2. let reg = /(xuxi) (is) \1 \2/g 
  3. reg.test(str)  // true    (1) 
  4. str.replace(reg, '$1 $2')  // xuxi is  (2) 

解釋: 其中括號被稱為捕獲括號, 模式中的 \1 和 \2 表示第一個和第二個被捕獲括號匹配的子字符串,即 xuxi 和 is,匹配了原字符串中的后兩個單詞, 因此(1)中運行的結果為true. 當我們在字符串中使用replace時, 我們可以使用$1, $2這樣的方式獲取第n個匹配項,并用來替換字符串. 如(2)中的運行結果.

非捕獲括號的模式匹配(?:x)

主要用來匹配某一類字符串但不記住匹配項.

案例:

  1. let str = 'xuxixuxi' 
  2. let reg = /(?:xuxi){1,2}/g 
  3. reg.test(str)  // true    (1) 

解釋: 其中(?:)被稱為非捕獲括號, 我們可以使用它匹配一組字符但是并不記住該字符,一般用來判斷某類字符是否存在于某字符串中.

先行斷言x(?=y)

先行斷言: 匹配'x'僅僅當'x'后面跟著'y'.

案例:

  1. let str = '王者融化' 
  2. let reg = /王(?=者)/ 
  3. reg.test(str)  // true    (1) 

解釋: /王(?=者)/會匹配到"王"僅當它后面跟著"者".但是"者"不屬于匹配結果的一部分.

后行斷言(?<=y)x

后行斷言: 匹配'x'僅當'x'前面是'y'.

案例:

  1. let str = 'xuxiA' 
  2. let reg = /(?<=xuxi)A/ 
  3. reg.test(str)  // true    (1) 

解釋: /(?<=xuxi)A/會匹配到A僅當它前面為xuxi.但是xuxi不屬于匹配結果的一部分.

正向否定查找x(?!y)

正向否定查找: 僅僅當'x'后面不跟著'y'時匹配'x'.

案例:

  1. let str = '3.1415' 
  2. let reg = /\d+(?!\.)/ 
  3. reg.exec(str)  // [1415]   (1) 

解釋: 其中/\d+(?!.)/匹配一個或多個數字,當且僅當它后面沒有小數點時, 所以(1)中執行后會匹配到1415而不是3.1415

反向否定查找(?

反向否定查找: 僅僅當'x'前面不是'y'時匹配'x'.

案例:

  1. let str = '3.1415' 
  2. let reg = /(?<!\.)\d+/ 
  3. reg.exec(str)  // [3]    (1) 

解釋: /(?

字符集合和反向字符集合的用法 [xyz] / [^xyz]

[xyz]: 一個字符集合。匹配方括號中的任意字符,包括轉義序列。你可以使用破折號(-)來指定一個字符范圍。

[^xyz]: 一個反向字符集。也就是說,它匹配任何沒有包含在方括號中的字符。你可以使用破折號(-)來指定一個字符范圍。任何普通字符在這里都是起作用的

案例:

  1. let str = 'abcd' 
  2. let reg1 = /[a-c]+/ 
  3. let reg2 = /[^d]$/ 
  4. reg1.test(str)  // true    (1) 
  5. reg2.test(str)  // false    (2) 

解釋: (1)中將返回true因為字符串中包含a-c中的字符, (2)中獎返回false, 因為字符串結尾為d, 但正則reg2需要匹配結尾不為d的字符串.

詞邊界和非單詞邊界匹配\b\B

\b 匹配一個詞的邊界。一個詞的邊界就是一個詞不被另外一個“字”字符跟隨的位置或者前面跟其他“字”字符的位置,例如在字母和空格之間。注意,匹配中不包括匹配的字邊界。換句話說,一個匹配的詞的邊界的內容的長度是0。

\B 匹配一個非單詞邊界。匹配如下幾種情況:(1)字符串第一個字符為非“字”字符 (2)字符串最后一個字符為非“字”字符 (3)兩個單詞字符之間 (4)兩個非單詞字符之間 (5)空字符串

案例:

  1. let str = 'xuxi' 
  2. let reg1 = /xi\b/ 
  3. let reg2 = /xu\B/ 
  4. reg1.exec(str)  // [xi]    (1) 
  5. reg2.exec(str)  // [xu]    (2) 

解釋: (1)中匹配到了單詞邊界,即xi, 為該字符串的末尾.(2)中應為xu為非單詞邊界,所以會被其匹配到.

空白字符/非空白字符匹配\s\S

  1. \s: 匹配一個空白字符,包括空格、制表符、換頁符和換行符. 
  2.  
  3. \S: 匹配一個非空白字符 

案例:

  1. let str = 'xuxi is' 
  2. let reg1 = /.*\s/g 
  3. let reg2 = /\S\w*/g 
  4. reg1.exec(str)  // [xuxi]    (1) 
  5. reg2.exec(str)  // [xuxi]    (2) 

解釋: (1)和(2)中執行之后都將匹配xuxi, 一個是空白字符之前的匹配, 一個是非空白字符的匹配.

單字字符/非單字字符匹配\w/W

\w: 匹配一個單字字符(字母、數字或者下劃線)。等價于 [A-Za-z0-9_]。

\W: 匹配一個非單字字符。等價于 [^A-Za-z0-9_]

由于以上2種模式比較簡單,這里就不一一介紹了.

正則10大應用案例

接下來筆者將總結幾個使用正則的實際應用,供大家學習和參考.

1. 去除字符串內指定元素的標簽

  1. function trimTag(tagName, htmlStr) { 
  2.   let reg = new RegExp(`<${tagName}(\\s.*)*>(\\n|.)*<\\/${tagName}>`, "g"
  3.   return htmlStr.replace(reg, ''

2. 短橫線命名轉駝峰命名

  1. // 短橫線轉駝峰命名, flag = 0為小駝峰, 1為大駝峰 
  2. function toCamelCase(str, flag = 0) { 
  3.   if(flag) { 
  4.     return str[0].toUpperCase() + str.slice(1).replace(/-(\w)/g, ($0, $1) => $1.toUpperCase()) 
  5.   }else { 
  6.     return str.replace(/-(\w)/g, ($0, $1) => $1.toUpperCase()) 
  7.   } 

3. 實現一個簡單的模板引擎

關于實現一個模板引擎, 實現中用到了大量的正則,建議感興趣的可以直接看實現一個簡單的模板引擎.

4. 去除字符串中的空格符

  1. function trimAll(str) { 
  2.   return str.replace(/\s*/g,""

5. 判斷指定格式的數據輸入合法性

  1. function numCheck(str, specialNum) { 
  2.   if(str.indexOf(',') > -1) { 
  3.       return str.splite(',').every(item=>this.numCheck(item)); 
  4.   } else { 
  5.       return str.split(specialNum).length === 2; 
  6.   } 

6. 去除url參數字符串中值為空的字段

  1. // 去除url參數字符串中值為空的字段 
  2. const trimParmas = (parmaStr:string = '') => { 
  3.   return parmaStr.replace(/((\w*?)=&|(&\w*?=)$)/g, ''

7. 將瀏覽器參數字符串轉化為參數對象

  1. function unParams(params = '?a=1&b=2&c=3') { 
  2.   let obj = {} 
  3.   params && params.replace(/((\w*)=([\.a-z0-9A-Z]*)?)?/g, (m,a,b,c) => { 
  4.     if(b || c) obj[b] = c 
  5.   }) 
  6.   return obj 

8. 計算字符串字節數

  1. /** 
  2.  * 計算字符串字節數 
  3.  * @param str 
  4.  * @desc 一個中文占2個字節, 一個英文占一個字節 
  5.  */ 
  6. function computeStringByte(str) { 
  7.   let size = 0, 
  8.   strArr = str.split(''), 
  9.   reg = /[\u4e00-\u9fa5]/   // 判斷是否為中文 
  10.   for(let i = strArr.length; i--; i>=0) { 
  11.     if(reg.test(strArr[i])) { 
  12.       size+= 2 
  13.     }else { 
  14.       size += 1 
  15.     } 
  16.   } 
  17.   return size 

9. 匹配是否包含中文字符

  1. function hasCn(str) { 
  2.   let reg = /[\u4e00-\u9fa5]/g 
  3.   return reg.test(str) 

10. 實現搜索聯想功能

  1. function searchLink(keyword) { 
  2.   // 模擬后端返回數據 
  3.   let list = ['abc''ab''a''bcd''edf''abd']; 
  4.   let reg = new RegExp(keyword, 'i'); 
  5.   return list.filter(item => reg.test(item)) 

 

責任編輯:武曉燕 來源: 趣談前端
相關推薦

2023-05-18 08:01:01

前端搜索javascript

2024-03-04 00:00:00

javascript正則字符串

2022-08-03 08:03:03

前端APIjavascript

2015-07-15 13:54:13

2021-07-26 10:33:54

Web開發項目

2015-10-28 13:57:29

融合架構華三UIS

2018-06-24 16:39:28

Tomcat異常線程

2020-12-12 13:50:16

云開發

2021-01-27 13:54:05

開發云原生工具

2022-06-29 09:43:14

SQL優化數據庫

2021-03-25 06:12:55

SVG 濾鏡CSS

2012-05-22 10:12:59

jQuery

2017-12-12 14:50:33

數據庫MySQL命令

2022-06-15 07:21:47

鼠標指針交互效果CSS

2022-08-15 22:34:47

Overflow方向裁切

2021-02-20 16:01:26

Github前端開發

2023-05-15 09:16:18

CSSCSS Mask

2022-07-11 13:09:26

mmapLinux

2021-09-26 07:57:15

Web項目GitHub

2025-02-13 09:37:26

點贊
收藏

51CTO技術棧公眾號

日本精品一区二区三区四区| 国产精品久久久久久久久免费看| 少妇丰满尤物大尺度写真| 超碰在线最新| 97久久超碰精品国产| 国产成人福利视频| 无码黑人精品一区二区| 精品福利一区| 欧美人狂配大交3d怪物一区| 日韩在线视频在线| 青青青手机在线视频观看| 美女mm1313爽爽久久久蜜臀| 欧美—级a级欧美特级ar全黄| 国产女主播喷水高潮网红在线| 91精品一区| 欧美性xxxxxxx| 天天综合中文字幕| 青青色在线视频| 国产成人精品在线看| 国产成人精品国内自产拍免费看| 男人与禽猛交狂配| 国产剧情在线观看一区| 精品国产凹凸成av人网站| 密臀av一区二区三区| 国精产品一区一区三区mba下载| 久久久久亚洲蜜桃| 国产一区国产精品| 国产成人精品免费看视频| 天堂va蜜桃一区二区三区漫画版| 欧美日韩电影在线观看| 五月天婷婷丁香网| 九九综合在线| 亚洲国产欧美日韩精品| 亚洲一区二区三区四区精品| 日韩欧美一区二区三区在线观看 | 99热在线精品观看| xxx欧美精品| xxxx日本免费| 啪啪国产精品| 亚洲成人网久久久| 波多野结衣中文字幕在线播放| 欧美va视频| 色一情一乱一乱一91av| 日韩精品视频一区二区在线观看| 男男gaygays亚洲| 亚洲欧美偷拍三级| 国产又粗又爽又黄的视频| 亚洲成人三级| 国产精品久久久久毛片软件| 亚洲成人第一| sese一区| 亚洲国产成人一区二区三区| 日韩精品大片| 激情小视频在线| 久久久99免费| 青青影院一区二区三区四区| 午夜在线视频免费| 91老师国产黑色丝袜在线| 国产日韩精品推荐| 五月激情婷婷综合| 93久久精品日日躁夜夜躁欧美| 国产一区二区三区色淫影院| 欧美熟妇另类久久久久久不卡| 国产成人自拍在线| 国产精品9999久久久久仙踪林| 亚洲精品一区二区口爆| 成人av免费在线| 九九九九九精品| 日韩porn| 国产精品欧美久久久久无广告| 亚洲亚洲精品三区日韩精品在线视频| 在线观看完整版免费| 成人欧美一区二区三区黑人麻豆| 影音先锋欧美资源| av免费在线免费观看| 亚洲成人自拍一区| 热久久精品国产| 欧美韩国日本| 精品乱人伦小说| 亚洲熟妇无码av| 波多野结衣在线播放一区| 日韩一区二区在线视频| 青青草手机视频在线观看| 欧美日韩亚洲一区二区三区在线| 久久久久久久爱| 国产一级一级国产| 久久99国内精品| 国产精品乱码一区二区三区| 免费黄色片在线观看| 国产精品色一区二区三区| 亚洲小说欧美另类激情| 狠狠躁少妇一区二区三区| 欧美在线高清视频| 少妇愉情理伦片bd| 欧美欧美黄在线二区| 久久精品色欧美aⅴ一区二区| 久久国产精品二区| 日韩综合小视频| 91九色露脸| 加勒比一区二区三区在线| 亚洲精品国产第一综合99久久| 免费 成 人 黄 色| 四虎国产精品免费久久| 亚洲国产精品免费| 黄色裸体一级片| 亚洲一区视频| aaa级精品久久久国产片| 国产在线高清| 亚洲午夜私人影院| 高清一区在线观看| 精品淫伦v久久水蜜桃| 最近2019中文字幕一页二页| 伊人国产在线观看| 久久超碰97中文字幕| 久久精品成人一区二区三区蜜臀 | 国产精品欧美经典| 国产成人无码精品久久久性色| 亚洲久草在线| 亚洲欧美一区二区三区在线 | 欧美黄在线观看| 国产国产精品人在线视| 空姐吹箫视频大全| 亚洲人成人一区二区在线观看| 久久精品午夜福利| 乱亲女h秽乱长久久久| 久久精品视频在线播放| 天天综合久久综合| 91日韩精品一区| 免费高清一区二区三区| 精品一区二区三区免费看| 中文日韩电影网站| 波多野结衣黄色网址| 99精品国产热久久91蜜凸| av 日韩 人妻 黑人 综合 无码| 成人黄色在线| 亚洲视频日韩精品| 二区视频在线观看| 91色porny| 国产免费一区二区三区视频| 精品三级av在线导航| 欧美黄色片在线观看| a在线观看免费| 亚洲图片你懂的| www.久久久久久久久久久| 日韩精品一区二区三区免费观影| 国产精品h片在线播放| 你懂得网站在线| 色婷婷av久久久久久久| 搡老熟女老女人一区二区| 一区二区三区福利| 九色91在线视频| xxx欧美xxx| 亚洲欧洲激情在线| 久久久久久亚洲av无码专区| 久久久久久久久久久黄色| av免费中文字幕| 欧美日韩中文字幕一区二区三区 | 国产高清精品二区| 欧美精品日韩www.p站| 99在线观看精品视频| 亚洲在线视频网站| 欧美双性人妖o0| 亚洲欧美日韩国产一区二区| 欧美第一黄网| 精品国产欧美日韩一区二区三区| 中文字幕无线精品亚洲乱码一区 | 亚洲免费中文字幕| 波多野结衣不卡| 国产精品国产三级国产aⅴ中文| xxww在线观看| 欧美va天堂| 精品不卡在线| 日韩国产激情| www.日韩视频| 高h调教冰块play男男双性文| 午夜影院久久久| 国产精品无码久久久久一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 热这里只有精品| 国产精品videossex| 日韩免费在线观看视频| 香蕉视频免费在线播放| 欧美一区二区精品| 国产69精品久久久久久久久久| 久久久久九九视频| 亚洲天堂网2018| 激情综合在线| 日韩电影免费观看在| 免费欧美网站| 日本一区二区在线播放| 日本免费在线视频| 亚洲韩国日本中文字幕| 中文永久免费观看| 亚洲综合av网| 日本人亚洲人jjzzjjz| 国产黄色精品网站| 成人在线免费播放视频| 欧美精品黄色| 日韩久久久久久久| swag国产精品一区二区| 国产精品日韩电影| 丁香花在线高清完整版视频| 在线观看日韩www视频免费| www.黄色小说.com| 欧美视频自拍偷拍| 日韩精品乱码久久久久久| 国产精品第四页| 7788色淫网站小说| 国产乱对白刺激视频不卡| 成人一级片网站| 欧美精品九九| 亚洲一区二区三区午夜| 神马久久av| 成人一区二区三区四区| 福利一区视频| 国产成人av在线播放| av老司机免费在线| 欧美理论片在线观看| 一广人看www在线观看免费视频| 日韩黄色高清视频| 亚洲国产成人精品一区二区三区| 欧美亚洲禁片免费| wwwwww国产| 亚洲成人av一区| 欧美日韩亚洲国产另类| 国产精品国产三级国产aⅴ中文 | 亚洲欧美另类综合| 777午夜精品免费视频| 波多野结衣视频网址| 亚洲v中文字幕| 久久老司机精品视频| 亚洲免费大片在线观看| 免费高清在线观看电视| 亚洲欧洲www| 亚洲色图100p| 中文一区在线播放| 人成免费在线视频| 国产视频在线观看一区二区三区| 丰满少妇在线观看资源站| 不卡一区在线观看| 无码任你躁久久久久久老妇| 国产成人免费在线观看不卡| 久久久精品视频国产| 久久av中文字幕片| 可以看污的网站| 国产在线播放一区二区三区| 欧美一级特黄aaa| 韩国理伦片一区二区三区在线播放| 国产又猛又黄的视频| 三级成人在线视频| 波多野结衣天堂| 免费久久精品视频| 污版视频在线观看| 久久国产三级精品| av中文字幕网址| 国产九色精品成人porny| xxxx国产视频| 成人aa视频在线观看| 日韩aaaaa| 国产亚洲婷婷免费| 日本在线观看网址| 亚洲人成7777| 久久一级黄色片| 天天综合天天做天天综合| 日韩精品久久久久久久| 色屁屁一区二区| 一区二区三区午夜| 日韩三级在线免费观看| jizz国产视频| 日韩精品视频在线观看免费| 韩日视频在线| 日韩最新免费不卡| 在线观看wwwxxxx| 97成人超碰免| 成人精品一区二区三区电影| 成人精品一区二区三区电影黑人 | 精品乱子伦一区二区三区| 妖精视频一区二区三区免费观看| 日韩欧美电影一区二区| 91精品动漫在线观看| 超碰成人免费在线| 视频在线观看91| 亚洲五月激情网| 91美女在线观看| 久久爱一区二区| 午夜成人免费电影| 成人一二三四区| 日韩美女在线视频| 国内在线免费高清视频| 久久久精品欧美| 久久青草伊人| 成人免费自拍视频| 免费萌白酱国产一区二区三区| 涩涩涩999| 亚洲第一黄网| 天堂在线一区二区三区| 91在线观看视频| 日本黄色片免费观看| 狠狠躁夜夜躁人人爽超碰91| 91福利免费视频| 亚洲另类图片色| 四虎影院观看视频在线观看 | 亚洲性猛交富婆| 欧美mv日韩mv国产网站| 国产裸舞福利在线视频合集| 久久久久久久久久婷婷| 欧美美女被草| 免费在线成人av电影| 欧美日韩亚洲国产精品| 日本中文字幕二区| 91首页免费视频| 久久久一二三区| 欧美日韩精品二区第二页| 日本一卡二卡四卡精品| 精品少妇v888av| 久久久国产精品网站| 裸模一区二区三区免费| 精品999成人| 久久aaaa片一区二区| 国产精品另类一区| 无码人妻av免费一区二区三区| 欧美一区二区三区不卡| 日本视频在线观看| 国产精品久久久久久婷婷天堂| 久久久久高潮毛片免费全部播放| 91制片厂免费观看| 蜜桃一区二区三区四区| 无码 人妻 在线 视频| 精品成人乱色一区二区| 欧美 日韩 国产 精品| 欧美日韩第一视频| 欧州一区二区三区| 裸体裸乳免费看| 精品一区二区三区在线观看| 一级黄色毛毛片| 欧美在线你懂的| av资源在线观看免费高清| 日韩美女主播视频| 国产91精品对白在线播放| 国产精品无码av在线播放| 成人动漫中文字幕| 国产一级在线播放| 亚洲精品一区二区三区影院| 在线观看三级视频| 不卡视频一区二区三区| 欧美三级第一页| 韩国av中国字幕| 亚洲国产视频在线| 农村少妇久久久久久久| 久久久在线视频| 久久久久97| 欧美污视频网站| 国产人成一区二区三区影院| 成人小视频在线播放| 中文字幕日韩在线播放| 国产91在线播放精品| 一区二区冒白浆视频| 韩国三级在线一区| 欧美日韩精品在线观看视频| 日韩欧美亚洲国产精品字幕久久久| av免费网站在线观看| 99超碰麻豆| 日韩天堂av| 伊人网在线视频观看| 欧美性猛交xxxx黑人交| 久草免费在线| 国产精品日韩高清| 男人的天堂亚洲在线| 欧美乱大交做爰xxxⅹ小说| 日韩三级在线观看| 日本а中文在线天堂| 日韩精品另类天天更新| 精品一区二区三区免费视频| 久久机热这里只有精品| 日韩精品视频免费| 日韩一级特黄| 无码专区aaaaaa免费视频| 国产亚洲一区字幕| 国产情侣在线播放| 91精品国产高清久久久久久久久| 狠狠色丁香婷婷综合影院| 国产福利精品一区二区三区| 亚洲国产精品一区二区久久 | 久久久亚洲精品一区二区三区| 日韩乱码一区二区三区| 久久综合伊人77777尤物| 全国精品免费看| 天堂av8在线| 天天av天天翘天天综合网色鬼国产| 成人亚洲综合天堂| 国产精品国产三级欧美二区| 日韩高清不卡在线| 九九视频免费在线观看| 亚洲欧美一区二区三区四区| 警花av一区二区三区 | 理论片日本一区| 日韩欧美中文字幕一区二区| 在线电影av不卡网址| 风间由美性色一区二区三区四区| youjizzxxxx18|