日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS正则表达式常见场景下的用法总结

發布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS正则表达式常见场景下的用法总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)前置知識總結:?
1. 正則表達式 /xxxx/[標識] 其中的標識含義
?g (全文查找)
?i (忽略大小寫)
?m (多行查找)

2. 正則表達式創建的兩種方式(等價,都是對象)
創建對象的方式:這種創建方式的好處是可以往正則表達式中傳入參數~~

let re = new RegExp("a"); // RegExp是一個對象,最簡單的正則表達式,將匹配字母a? let re= new RegExp("a", "i"); // 第二個參數,表示匹配時不分大小寫? let re = new RegExp("a", "gi"); // 匹配所有的、忽略大小寫的字符a或A// 往正則表達式中傳入參數,如 let maxLength = 6; let re = new RegExp(`[\\.][\\d]{0, ${maxLength}}`);

字面量聲明的方式:

let re = /a/gi; // 匹配所有的、忽略大小寫的字符a或A

3. 正則表達式常見內置函數

  • test():被查找的字符串中是否存在模式。
  • exec():用正則表達式模式在字符串中運行查找,并返回包含該查找結果的一個數組。
  • compile():把正則表達式編譯為內部格式,從而執行得更快。
  • $1...$9:返回九個在模式匹配期間找到的、最近保存的部分。只讀。
  • leftContext ($`):返回被查找的字符串中從字符串開始位置到最后匹配之前的位置之間的字符。只讀。
  • rightContext ($'):返回被搜索的字符串中從最后一個匹配位置開始到字符串結尾之間的字符。只讀。
  • lastMatch ($&):返回任何正則表達式搜索過程中的最后匹配的字符。只讀。
  • 4. 字符串(或String對象)一些與正則表達式相關的方法

  • replace():替換與正則表達式匹配的子串(注意:js沒有replaceAll方法,不要跟其它語言記混淆了!,替換所有第一個參數用正則表達式控制/exp/g)。
  • split():把字符串分割為字符串數組。
  • match():返回一個或多個匹配的數組,如果沒有匹配上返回null。match():返回一個或多個匹配的數組,如果沒有匹配上返回null。 var str =?"baabca_aaef"; str.match(/a/g); // 返回["a", "a", "a", "a", "a"] str.match(/a/); // 返回["a"],沒有標志g則執行一次匹配成功即停止 str.match(/aa/g); // 返回["aa", "aa"] str.match(/A/g); // 返回nullvar str2 = "11 plus 2 equal 13"; str2.match(/\d/g); // 返回["1","1","2","1","3"] str2.match(/\d+/g); // 返回["11","2","13"]

    matchAll():返回RegExpStringIterator迭代器對象(用于子匹配,但是兼容性不好,在iOS上可能無效,如果要求兼容的話需要補丁,可以使用該npm包解決兼容性問題https://www.npmjs.com/package/string.prototype.matchall。

    var str="11 plus 2 equal 13"; let ite = str.matchAll(/(\d+)/g); let i0 = ite.next(); let i1 = ite.next(); console.log(io); // 結果見下圖(左) console.log(i1); // 結果見下圖(右)

    ? ? ? ?

    let matchFn = (info) => {let reg = /\{(?<name>[^{}]+)\}/g;// 匹配出所字段let matches = [...info.matchAll(reg)];let matchesKey = [];matches.forEach(item => {let groups = item.groups;matchesKey.push(groups.name);});return matchesKey; };matchFn('{a}{b}cccozvdkddzhkzd'); // 運行結果為: ["a", "b", "d"]
  • search():檢索與正則表達式相匹配的值。
  • (二)應用場景總結:?
    1. 取出版本號
    如:"Ubuntu 8",取出數字8

    let osVersion = "Ubuntu 8"; // 其中的8表示系統主版本號 var re = /^[a-z]+\s+\d+$/i; // +號表示字符至少要出現1次,\s表示空白字符,\d表示一個數字 arr = re.exec(osVersion); // 返回一個由匹配上的內容組成的數組 console.log(arr[0]); // 因為整個字符串剛好匹配re,所以arr[0]等于osVersionre = /\d+/; // 只需要取出數字 var arr = re.exec(osVersion); console.log(arr[0]); // 8

    如:"Ubuntu 8.10",取出主版本號8和次版本號10。(采用正則表達式的小括號子匹配的方式)

    let osVersion = "Ubuntu 8.10"; // 取出主版本號和次版本號 re=/^[a-z]+\s+(\d+)/i; // 用()來創建子匹配 arr =re.exec(osVersion); // exec返回的數組第1到n元素中包含的是匹配中出現的任意一個子匹配 console.log(arr[1]); // 8,第一個子匹配,事實也可以這樣取出主版本號 console.log(arr.length); // 2 re = /^[a-z]+\s+(\d+)\.(\d+)$/i; //.是正則表達式元字符之一,若要用它的字面意義須轉義 arr = re.exec(osVersion); console.log(arr.length); // 3 console.log(arr[0]); // 完整的osVersion,因為全匹配上 console.log(arr[1]); // 8,主版本號 console.log(arr[2]); // 10,次版本號

    2. 提取驗證碼
    如:"your captcha is :0a4Fd3",取出0

    let message = "your captcha is :0a4Fd3"; let re = /:([\d|a-zA-Z]{4,6})$/; let arr = re.exec(message); let captcha = arr[1]; console.log(captcha); // 0a4Fd3

    3.?替換版本號
    如:"Ubuntu 8.10 ubuntu 9.12",替換為"Ubuntu 新版本號 ubuntu 新版本號"

    let osVersion = "Ubuntu 8.10 ubuntu?9.12"; let re = /([a-z]\s+)(\d+\.\d+)(\s*)/gi; let result = osVersion.replace(re,"$1新版本號$3"); // "$1新版本號$3"為替換的模板 console.log(result); // "Ubuntu 新版本號 ubuntu 新版本號" /* 匹配替換過程:1.匹配到"Ubuntu 8.10 "為第1組,此時re表示"Ubuntu 8.10 ",$1:"Ubuntu "$2:"8.10"$3:" "然后執行替換操作:把re表示的字符串內容替換為模板表示的內容即"Ubuntu 新版本號 ";2.匹配到"ubuntu?9.12"為第2組,此時re表示"ubuntu?9.12",$1:"ubuntu?"$2:"9.12"$3:""然后執行替換操作:把re表示的字符串內容替換為模板表示的內容即"ubuntu?新版本號"。 */

    參考來源:https://www.jb51.net/article/25313.htm

    ?

    ?

    總結

    以上是生活随笔為你收集整理的JS正则表达式常见场景下的用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。