正则是一个前端必须掌握的知识。可是因为用的少,忘了记,记了忘,致使面试常常坐蜡。这里上篇先介绍正则的规则,下篇结合一些具体题目,带你们从新学习巩固一下正则,争取面试给本身加分。html
let regx = /^[\u4e00-\u9fa5]{0,}$/
let reg = /^[\u4e00-\u9fa5]{2,4}$/
把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'
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)) //getElementById
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/2017
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
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)
身份证号码可能为15位或18位,15位为全数字,18位中前17位为数字,最后一位为数字或者X函数
let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
“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 = /\b([a-z]+) \b\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 up
var a = '0001230000' var b=a.replace(/(\d)\1+$/ig,function(res){ return res.replace(/0/g,'x') //replace改变不了原字符串 }) console.log(b) //000123xxxx
.能够出现可也以不出现,可是一旦出现后面必须跟一位或者多位数字
最开始能够有+/-也能够没有
整数部分,一位数能够是0-9,多位数不能以0开头ui
let reg = /^-?(\d|([1-9]\d+))(\.\d+)?$/
将'20151214'转化为繁体'贰零壹伍壹贰壹肆'url
var str = '20151214' var ary = ['零','壹','贰','叁','肆','伍'] str =str.replace(/\d/g,function () { return ary[arguments[0]] //参数的第一个元素就是匹配的内容 }) console.log(str) //->贰零壹伍壹贰壹肆
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) //-->9
如今我要作一个搜索高亮
功能,须要一个拆分的正则来筛选出须要高亮的文本/好比我输入1,我须要'帐户A同步B 121'拆分红这个数组[‘帐户A同步B ’,'1','2',1'] 前面的1和后面的1都要高亮spa
let reg = /(?<=1)|(?=1)/g '帐户A同步B 121'.split(reg) //["帐户A同步B ", "1", "2", "1"]
pug模版引擎的基本原理
咱们选用一个经典的模版引擎pug,进入它的入门指南,pug.compileFile根据传入的字符串模版,生成了一个方法compiledFunction,compiledFunction根据传入的数据参数,生成不一样的html代码。问题来了,怎么实现compiledFunction这个函数?code
//- template.pug p #{name}的 Pug 代码! const pug = require('pug'); // 编译这份代码 const compiledFunction = pug.compileFile('template.pug'); // 渲染一组数据 console.log(compiledFunction({ name: '李莉' })); // "<p>李莉的 Pug 代码!</p>" // 渲染另一组数据 console.log(compiledFunction({ name: '张伟' })); // "<p>张伟的 Pug 代码!</p>"
分析:compileFile这个函数接受一个对象参数,根据属性值,执行相应的正则替换
function compiledFunction (args) { let template = 'p #{age1}的 Pug 代码!' //第一步,先生成标签 <p>{name}的 Pug 代码!<p/> 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) //<p>fyy的 Pug 代码!<p/> } compiledFunction ({age1:'fyy'}) //<p>fyy的 Pug 代码!</p>