JavaScript中關(guān)于字符串替換與截取的知識點匯總
〇、前言
在日常開發(fā)中,經(jīng)常遇到針對字符串的替換、截取,知識點比較碎容易混淆,特此總結(jié)一下,僅供參考。
一、替換第一個匹配項
字符串替換
let strtest = "0123測試replace456測試replace789測試replace0" console.log("原字符串:" + strtest) let outstr = strtest.replace("測試","ceshi") console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // 輸出字符串:0123ceshireplace456測試replace789測試replace0
正則表達式替換
當(dāng)直接在被替換字符串恰后加上 / 時,不添加修飾符,就等同于直接字符串替換。
let strtest = "0123測試replace456測試replace789測試replace0" console.log("原字符串:" + strtest) let outstr = strtest.replace(/測試/, "ceshi") console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // 輸出字符串:0123ceshireplace456測試replace789測試replace0
二、替換全部匹配項
字符串分組再聯(lián)合
let strtest = '0123測試replace456測試replace789測試replace0'; console.log("原字符串:" + strtest) let arrstr = strtest.split("測試"); let outstr = arrstr.join("ceshi"); console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // 輸出字符串:0123ceshireplace456ceshireplace789ceshireplace0
正則表達式替換
格式:/待替換的字符串/g、/待替換的字符串/mgi。
- g:執(zhí)行全局匹配,替換全部匹配項;
- i:不區(qū)分大小寫;
- m:多行匹配。
gim 可所以組合使用。
let strtest = "0123測試replace456測試replace789測試replace0" console.log("原字符串:" + strtest) let outstr = strtest.replace(/測試/g, "ceshi") // 另一種寫法: // let reg = new RegExp("測試", "g") // let outstr = strtest.replace(reg, "ceshi") console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // 輸出字符串:0123ceshireplace456ceshireplace789ceshireplace0
三、替換第 n 個匹配項
下邊以第二個為例。
字符串分組再聯(lián)合
思路:先通過被替換項分組,再根據(jù)目標(biāo)位數(shù)把整個分組分為兩個部分,在通過替換字符串聯(lián)合。
let num = 2 // 定義替換第二個匹配項 let strtest = '0123測試replace456測試replace789測試replace0'; console.log("原字符串:" + strtest) let arrstr = strtest.split("測試"); if(arrstr.length < num) return let arrstr1=[],arrstr2=[] for(let ii=0;ii<arrstr.length;ii++){ if(ii < num) arrstr1.push(arrstr[ii]) else arrstr2.push(arrstr[ii]) } let outstr = arrstr1.join("測試")+"ceshi"+arrstr2.join("測試"); console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // (index):59 輸出字符串:0123測試replace456ceshireplace789測試replace0
正則表達式實現(xiàn)
將第一個匹配項跳過,并把第二個匹配項之前的內(nèi)容標(biāo)識為變量。
let strtest = '0123測試replace456測試replace789測試replace0'; console.log("原字符串:" + strtest) let outstr = strtest.replace(/((?:.*?測試.*?){1}.*?)測試/m, "$1-ceshi-") // ?: 表示:其后邊的 pattern 匹配但不獲取。匹配項被標(biāo)識為 $1,后續(xù)會引用 // .*? 表示:.* 除 '/n' 之外的任意個任意字符 // {1} 表示:其前邊的 pattern 出現(xiàn)一次 // /pattern/m 表示: m 全局查詢 console.log("輸出字符串:" + outstr) // 原字符串:0123測試replace456測試replace789測試replace0 // 輸出字符串:0123測試replace456測試replace789-ceshi-replace0
參考:https://stackoverflow.com/questions/42943096/replace-nth-match-of-matches-with-regex
四、替換指定標(biāo)記之間的內(nèi)容
字符串分組再聯(lián)合
let strtest = '0123<Object>replace456測試replace78</Object>9測試replace0'; let startstr = "<Object>" let endstr = "</Object>" if (strtest.indexOf(startstr) > strtest.indexOf(endstr)) return console.log("原字符串:" + strtest) let arr = strtest.split(startstr) let arr2 = arr[1].split(endstr) let resultstr = arr2[0] let outstr = startstr + resultstr + endstr console.log("輸出字符串:" + outstr) // 原字符串:0123<Object>replace456測試replace78</Object>9測試replace0 // 輸出字符串:<Object>replace456測試replace78</Object>
正則表達式方法 replace()、match()、exec()
替換為指定字符串:( replace() )
let strtest = '0123<Object>replace456測試replace78</Object>9測試replace0'; console.log("原字符串:" + strtest) let outstr = strtest.replace(/<Object>(.*?)<\/Object>/m, "-ceshi-") // \ 為轉(zhuǎn)義字符 console.log("輸出字符串:" + outstr) // 原字符串:0123<Object>replace456測試replace78</Object>9測試replace0 // 輸出字符串:0123-ceshi-9測試replace0
取出帶標(biāo)記字符串的內(nèi)容:( match() )
let strtest = '0123<Object>replace456測試replace78</Object>9測試replace0'; console.log("原字符串:" + strtest) let outstr = strtest.match(/<Object>(.*?)<\/Object>/m) console.log("輸出字符串:" + outstr) // 原字符串:0123<Object>replace456測試replace78</Object>9測試replace0 // 輸出字符串:<Object>replace456測試replace78</Object>
當(dāng)可能有多個匹配項時:( exec() )
let strtest = "這是<Object>要提取的內(nèi)容</Object>,還有<Object>另一個內(nèi)容</Object>" console.log("原字符串:" + strtest) let regex = /<Object>(.*?)<\/Object>/gm const matches = [] let match while ((match = regex.exec(strtest)) !== null) { matches.push(match[1]) console.log(match) } console.log("輸出全部匹配項:", matches) // 原字符串:這是<Object>要提取的內(nèi)容</Object>,還有<Object>另一個內(nèi)容</Object> // (2) ["<Object>要提取的內(nèi)容</Object>", "要提取的內(nèi)容", index: 2, input: "這是<Object>要提取的內(nèi)容</Object>,還有<Object>另一個內(nèi)容</Object>", groups: undefined] // (2) ["<Object>另一個內(nèi)容</Object>", "另一個內(nèi)容", index: 28, input: "這是<Object>要提取的內(nèi)容</Object>,還有<Object>另一個內(nèi)容</Object>", groups: undefined] // 輸出全部匹配項: (2) ["要提取的內(nèi)容", "另一個內(nèi)容"]
以上就是JavaScript中關(guān)于字符串替換與截取的知識點匯總的詳細內(nèi)容,更多關(guān)于JavaScript字符串替換截取的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS如何實現(xiàn)Base64編碼和解碼(及中文亂碼問題)
這篇文章主要給大家介紹了關(guān)于JS如何實現(xiàn)Base64編碼和解碼及中文亂碼問題的相關(guān)資料,Base64編碼是一種常用的將二進制數(shù)據(jù)轉(zhuǎn)換為文本數(shù)據(jù)的方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-10-10javascript多種數(shù)據(jù)類型表格排序代碼分析
這個表格排序代碼,性能比上一次那一個好了很多而且支持很多種類型的排序,這一次寫的能支持更多的排序。2010-09-09教你如何使用firebug調(diào)試功能了解javascript閉包和this
這篇文章主要介紹了教你如何使用firebug調(diào)試功能了解javascript閉包和this,javascript的調(diào)試也是一個比較大的難點,很多基礎(chǔ)的東西都需要自己去摸索,這里將自己的經(jīng)驗分享給大家,希望對大家能夠有所幫助2015-03-03