摘要:正則引言正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導致面試經常坐蠟。這里上篇先介紹正則的規則,下篇結合一些具體題目,帶大家重新學習鞏固一下正則,爭取面試給自己加分。
正則 引言
正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導致面試經常坐蠟。這里上篇先介紹正則的規則,下篇結合一些具體題目,帶大家重新學習鞏固一下正則,爭取面試給自己加分。
面試題實戰 1. 匹配漢字let regx = /^[u4e00-u9fa5]{0,}$/2. 中國真實姓名
let reg = /^[u4e00-u9fa5]{2,4}$/3. 字符串去重
把aaabbbccc變成abc
思路1,轉換成數組,利用set去重,再join
思路2,正則(有局限性,必須是重復元素挨一起的,且不是這種鑲嵌的"abac")
let a = "aabbbccc" let b = a.replace(/(S)1+/g,function (res) { //這里1指的是第一個分組 return res[0] }) console.log(b) //"abc"4.轉駝峰
var s1 = "get-element-by-id"; 給定這樣一個連字符串,寫一個function轉換為駝峰命名法形式的字符串 getElementById
let a = "get-element-by-id" // 這個題目如果想分割單詞是比較麻煩的 let f = function(s) { return s.replace(/-w/g, function(x) { return x.slice(1).toUpperCase(); }) } console.log(f(a)) //getElementById5. 日期格式化
2017-05-11轉換成5/11/2017
let a = "2017-05-11" let reg = /(d{4})-(d{2})-(d{2})/g b=a.replace(reg,function (res, g1, g2, g3) { return `${g2.slice(1)}/${g3}/${g1}` }) console.log(b) //5/11/20176. JS實現千位分隔符
var a = "1234567" var reg = /d{1,3}(?=(d{3})+$)/g var b = a.replace(reg,function (res,group,index) { //如果有?的話分組指的是最后一個 console.log(res,group,index) //所以group永遠是4,5,6 return res + "," }) console.log(b) //1,234,567
寫個vue項目里面經常使用的千分位過濾方法
//全局注冊 Vue.filter("toThousands", function(num) { const strArr = (num + "").split(".") strArr[0] = strArr[0].replace(/d{1,3}(?=(d{3})+$)/g, (match) => { return match + "," }) return strArr.join(".") }) // {{1234|toThousands}} ==>渲染為 1,234 // {{1234.23|toThousands}} ==>渲染為 1,234.237. 獲取 url 中的參數
let url = "www.baidu.com?age=11&name=fyy" let reg = /([^?&=]+)=([^?&=]+)/g var obj = {} url.replace(reg,function(){ obj[arguments[1]] = obj[arguments[2]] }) console.log(obj)8. 驗證身份證號
身份證號碼可能為15位或18位,15位為全數字,18位中前17位為數字,最后一位為數字或者X
let reg = /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/9. 句子去重復單詞
“Is is the cost of of gasoline going up up” => ""is the cost of gasoline going up""
let a = "Is is the cost of of gasoline going up up" let reg = /([a-z]+) 1/ig //注意不能寫成這樣let reg = /(w)+ 1/ig 匹配單個字符是錯的,只會匹配到最后一個 //(w+) 1/ig 這么寫也行 let b = a.replace(reg,function (res) { return res.split(" ")[0] }) console.log(b) // Is the cost of gasoline going up10. 寫一個方法使得數字末尾的連續0變成x如0001230000變成000123xxxx
var a = "0001230000" var b=a.replace(/(d)1+$/ig,function(res){ return res.replace(/0/g,"x") //replace改變不了原字符串 }) console.log(b) //000123xxxx11. 有效數字驗證:整數負數0小數
.可以出現可也以不出現,但是一旦出現后面必須跟一位或者多位數字
最開始可以有+/-也可以沒有
整數部分,一位數可以是0-9,多位數不能以0開頭
let reg = /^-?(d|([1-9]d+))(.d+)?$/12. 字符整體替換
將"20151214"轉化為繁體"貳零壹伍壹貳壹肆"
var str = "20151214" var ary = ["零","壹","貳","叁","肆","伍"] str =str.replace(/d/g,function () { return ary[arguments[0]] //參數的第一個元素就是匹配的內容 }) console.log(str) //->貳零壹伍壹貳壹肆13. 出現字符最多的次數
let str = "zzzzzzzzzguowoaini" let obj = {} str.replace(/[a-z]/ig,function () { let val = arguments[0] obj[val] >=1?obj[val]+=1:obj[val] =1 }) let max = 0 for(let key in obj){ obj[key]>max?max=obj[key]:null } console.log(max) //-->914.搜索高亮功能的正則分割
現在我要做一個搜索高亮功能,需要一個拆分的正則來篩選出需要高亮的文本/比如我輸入1,我需要"賬戶A同步B 121"拆分成這個數組[‘賬戶A同步B ’,"1","2",1"] 前面的1和后面的1都要高亮
let reg = /(?<=1)|(?=1)/g "賬戶A同步B 121".split(reg) //["賬戶A同步B ", "1", "2", "1"]15. pug模版引擎的基本原理
我們選用一個經典的模版引擎pug,進入它的入門指南,pug.compileFile根據傳入的字符串模版,生成了一個方法compiledFunction,compiledFunction根據傳入的數據參數,生成不同的html代碼。問題來了,怎么實現compiledFunction這個函數?
//- template.pug p #{name}的 Pug 代碼! const pug = require("pug"); // 編譯這份代碼 const compiledFunction = pug.compileFile("template.pug"); // 渲染一組數據 console.log(compiledFunction({ name: "李莉" })); // "李莉的 Pug 代碼!
" // 渲染另外一組數據 console.log(compiledFunction({ name: "張偉" })); // "張偉的 Pug 代碼!
"
分析:compileFile這個函數接受一個對象參數,根據屬性值,執行相應的正則替換
function compiledFunction (args) { let template = "p #{age1}的 Pug 代碼!" //第一步,先生成標簽{name}的 Pug 代碼!
let a = template.replace(/^([a-z]) (.+)/g,function () { //S沒辦法匹配空格,.可以 return `<${arguments[1]}>${arguments[2].slice(1)}<${arguments[1]}/>` }) //第二步,再替換內容 a = a.replace(/{(.+)}/g,function (pat,group1) { return args[group1] }) console.log(a) //fyy的 Pug 代碼!
} compiledFunction ({age1:"fyy"}) //fyy的 Pug 代碼!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109515.html
摘要:正則引言正則是一個前端必須掌握的知識。這里上篇先介紹正則的規則,下篇結合一些具體題目,帶大家重新學習鞏固一下正則,爭取面試給自己加分。 正則 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導致面試經常坐蠟。這里上篇先介紹正則的規則,下篇結合一些...
摘要:責編現代化的方式開發一個圖片上傳工具前端掘金對于圖片上傳,大家一定不陌生。之深入事件機制前端掘金事件綁定的方式原生的事件綁定方式有幾種想必有很多朋友說種目前,在本人目前的研究中,只有兩種半兩種半還有半種的且聽我道來。 Ajax 與數據傳輸 - 前端 - 掘金背景 在沒有ajax之前,前端與后臺傳數據都是靠表單傳輸,使用表單的方法傳輸數據有一個比較大的問題就是每次提交數據都會刷新頁面,用...
摘要:核心知識點梳理數據篇看了一些資料,結合高程和對核心知識點進行了梳理。所以,一共有種聲明變量的方法。凡是在聲明之前就使用這些變量,就會報錯。還是那句話,建議大家掌握核心知識點,細枝末節的東西就隨意啦。 JS核心知識點梳理——數據篇 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 看了一些資料,結合ES6、高程和MD...
摘要:寫在前面正在看的源碼看到了部分感覺以前看的正則表達式基礎知識已經完全不夠用了現翻閱博客資料將一些中正則表達式難用的部分總結歸納方便自己和友翻閱正則分組重復匹配對于重復的匹配我們經常使用到正則表達式的分組功能我們使用正則匹配地址來實踐一下假 [TOC] 寫在前面 - Lionad 正在看VueJS的源碼, 看到了HtmlParser部分, 感覺以前看的正則表達式基礎知識已經完全不夠用了,...
閱讀 1179·2023-04-26 02:38
閱讀 1473·2021-11-22 09:34
閱讀 1180·2021-09-26 10:19
閱讀 3159·2019-08-29 17:15
閱讀 3515·2019-08-29 12:27
閱讀 1715·2019-08-26 13:51
閱讀 1858·2019-08-26 13:47
閱讀 1010·2019-08-26 12:20