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