大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 職業(yè)指南 高頻率出現(xiàn)的正則表達式面試題

高頻率出現(xiàn)的正則表達式面試題

更新時間:2022-12-27 10:55:05 來源:動力節(jié)點 瀏覽1243次

1.提取連續(xù)重復的字符

幣安原題 將有重復的字符提取出來,例如12323454545666,提取[ '23', '45', '6' ]

正則結(jié)果

const collectRepeatStr = (str) => {
  let repeatStrs = []
  const repeatRe = /(.+)\1+/g
  
  str.replace(repeatRe, ($0, $1) => {
    $1 && repeatStrs.push($1)
  })
  
  return repeatStrs
}

分析過程

  • 題目中有幾個關(guān)鍵信息是
  • 連續(xù)重復的字符

連續(xù)重復的字符數(shù)的長度是不限的(如23、45是兩位、6是一位)

那什么是連續(xù)重復呢?

11是連續(xù)重復、22也是連續(xù)重復、111當然也是。也就是說某些字符X之后一定也是跟著X,就叫連續(xù)重復。如果很明確知道X就是1,那么/11+/也就可以匹配了,但關(guān)鍵是這里的X是不明確的,怎么辦呢?。

使用反向引用的正則知識可以很方便解決這個問題。

第一步,寫出表示有一個字符重復的正則

// 這里的X可用.來表示,即所有的字符,并用括號進行引用,緊跟著反向應(yīng)用\1,也就是體現(xiàn)了連續(xù)重復的意思啦
let repeatRe = /(.)\1/
 
console.log(repeatRe.test('11')) // true
console.log(repeatRe.test('22')) // true
console.log(repeatRe.test('333')) // true
console.log(repeatRe.test('123')) // false

第二步,寫出表示有n個字符重復的正則

因為并不確定是要匹配11還是45 45所以括號內(nèi)需要用量詞+來體現(xiàn)n個重復字符,而反向引用本身也可以是大于一個的,例如 45 45 45

let repeatRe = /(.+)\1+/
 
console.log(repeatRe.test('11')) // true
console.log(repeatRe.test('22')) // true
console.log(repeatRe.test('333')) // true
console.log(repeatRe.test('454545')) // true
console.log(repeatRe.test('124')) // false

第三步,提取所有連續(xù)重復的字符

const collectRepeatStr = (str) => {
  let repeatStrs = []
  const repeatRe = /(.+)\1+/g
  // 很多時候replace并不是用來做替換,而是做數(shù)據(jù)提取用
  str.replace(repeatRe, ($0, $1) => {
    $1 && repeatStrs.push($1)
  })
  
  return repeatStrs
}
 
 
console.log(collectRepeatStr('11')) // ["1"]
console.log(collectRepeatStr('12323')) // ["23"]
console.log(collectRepeatStr('12323454545666')) // ["23", "45", "6"]

2. 實現(xiàn)一個trim函數(shù)

老生常談的題了,這里我們用兩種思路實現(xiàn) 去除字符串的首尾空格

正則結(jié)果

// 去除空格法
const trim = (str) => {
  return str.replace(/^\s*|\s*$/g, '')    
}
// 提取非空格法
const trim = (str) => {
  return str.replace(/^\s*(.*?)\s*$/g, '$1')    
}

正則表達式面試題

分析過程

初看題目我們腦海中閃過的做法是把空格部分刪除掉,保留非空格的部分,但是也可以換一種思路,也可以把非空格的部分提取出來,不管空格的部分。接下來我們來寫一下兩種trim方法的實現(xiàn)

方式一、去除空格法

const trim = (str) => {
  return str.replace(/^\s*|\s*$/g, '')    
}
 
console.log(trim('  前端胖頭魚')) // 前端胖頭魚
console.log(trim('前端胖頭魚  ')) // 前端胖頭魚 
console.log(trim('  前端胖頭魚  ')) // 前端胖頭魚
console.log(trim('  前端 胖頭魚  ')) // 前端 胖頭魚

方式二、提取非空格法

const trim = (str) => {
  return str.replace(/^\s*(.*?)\s*$/g, '$1')    
}
 
console.log(trim('  前端胖頭魚')) // 前端胖頭魚
console.log(trim('前端胖頭魚  ')) // 前端胖頭魚 
console.log(trim('  前端胖頭魚  ')) // 前端胖頭魚
console.log(trim('  前端 胖頭魚  ')) // 前端 胖頭魚

3. 將字符串首字母轉(zhuǎn)化為大寫,剩下為小寫

例如 hello world 轉(zhuǎn)為為Hello World

正則結(jié)果

const capitalize = (string) => {
  const capitalizeRegex = /(?:^|\s+)\w/g
 
  return string.toLowerCase().replace(capitalizeRegex, (match) => match.toUpperCase())
}

正則表達式面試題

分析過程

找到單詞的首字母然后將其轉(zhuǎn)化為大寫字母就可以,單詞前面可能是開頭也可能是多個空格。

const capitalize = (string) => {
  const capitalizeRegex = /(?:^|\s+)\w/g
 
  return string.toLowerCase().replace(capitalizeRegex, (match) => match.toUpperCase())
}
 
console.log(capitalize('hello world')) // Hello World
console.log(capitalize('hello WORLD')) // Hello World

4.通過name獲取url query參數(shù)

正則結(jié)果

const getQueryByName = (name) => {
  const queryNameRegex = new RegExp(`[?&]${name}=([^&]*)(&|$)`)
  const queryNameMatch = window.location.search.match(queryNameRegex)
  // 一般都會通過decodeURIComponent解碼處理
  return queryNameMatch ? decodeURIComponent(queryNameMatch[1]) : ''
}

分析過程

url query上的參數(shù) name=前端胖頭魚 所處的位置可能是

  • 緊跟著問號 ?name=前端胖頭魚&sex=boy
  • 在最后的位置 ?sex=boy&name=前端胖頭魚
  • 在1和2之間 ?sex=boy&name=前端胖頭魚&age=100

所以只要處理三個地方基本就可以通過正則來取了

  • name前面只能是?或者&
  • value的值可以除了是&以為的任意東西
  • value后面只能是跟著&或者是結(jié)束位置
const getQueryByName = (name) => {
  const queryNameRegex = new RegExp(`[?&]${name}=([^&]*)(?:&|$)`)
  const queryNameMatch = window.location.search.match(queryNameRegex)
  // 一般都會通過decodeURIComponent解碼處理
  return queryNameMatch ? decodeURIComponent(queryNameMatch[1]) : ''
}
// 1. name在最前面
// https://juejin.cn/?name=前端胖頭魚&sex=boy
console.log(getQueryByName('name')) // 前端胖頭魚
 
// 2. name在最后
// https://juejin.cn/?sex=boy&name=前端胖頭魚
console.log(getQueryByName('name')) // 前端胖頭魚
 
 
// 2. name在中間
// https://juejin.cn/?sex=boy&name=前端胖頭魚&age=100
console.log(getQueryByName('name')) // 前端胖頭魚

 以上就是“高頻率出現(xiàn)的正則表達式面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點Java官網(wǎng)。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 99精品欧美一区二区三区美图 | 欧美性猛交xxxxx按摩欧美 | 午夜按摩 | 日日摸夜夜摸狠狠摸97 | 夜夜夜夜猛噜噜噜噜噜 | 国产精品免费一区二区三区四区 | 欧美一级片网址 | 美女视频国产 | 亚洲精品综合欧美一区二区三区 | 成人国产精品久久久免费 | 九九热在线精品视频 | 色视频一区二区三区 | 中国免费毛片 | 99在线视频精品 | 日产国语一区二区三区在线看 | 精品久久一区二区三区 | 四虎www.| 国产成人精品久久 | 欧美一级免费观看 | 国产欧美精品一区二区三区–老狼 | 日本久久网站 | 成人97在线观看免费高清 | 日产一二三四五六七区麻豆 | 四虎成人免费网站在线 | 久久99青青久久99久久 | 天天添天天操 | 亚洲综合另类 | 日本大片免费一级 | 欧美区视频| 中文字幕久精品免费视频 | 亚洲国产高清视频 | 深夜福利免费 | 午夜影院操一 | 欧美色黄视频 | 5060网午夜一级毛片在线看 | 亚洲欧美日韩国产精品久久 | 高清一级毛片免免费看 | 免费观看一级毛片 | 四虎影视免费 | 日本一级作爱片在线观看 | 亚洲欧美日韩国产精品影院 |