天天看點

正規表達式處理輸入的小 demo前言

前言

日常積累,歡迎指正

export function formatAnswer(str) {
  const symbols = [
    //',', '。', '?', '!', ':', ';', '、', '~', '&', '@', '#',

    ',', '.', '?', '!', ':', ';', '.', '~', '&', '@', '#',

    ',', '。', '?', '!', ':', ';', '、', '~', '&', '@', '#'
  ]

  let strResult
  strResult = str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, '') // Emoji表情
  strResult = strResult.replace(/\s+/g, '') // 空格
  strResult = strResult.replace(/<\/?.+?>/g, '') // 換行
  strResult = strResult.replace(/[\r\n]/g, '') // 換行
  strResult = strResult.toLowerCase()

  const halfSymbolsLength = symbols.length / 2
  for (let i = 0; i < halfSymbolsLength; i++) {
    const reg = new RegExp(`/${symbols[i]}`, 'g') // 防止 symbols[i] 為正規表達式中的特殊符号時導緻的運作錯誤
    strResult = strResult.replace(reg, symbols[i + halfSymbolsLength])
  }
  return strResult
}
           

以上處理沒有什麼難度,唯一值得注意的代碼如下:

const reg = new RegExp(symbols[i], 'g') // 優化前的寫法
const reg = new RegExp(`/${symbols[i]}`, 'g') // 優化後的寫法
           

優化後的寫法是為了相容 symbols 中存在正規表達式特殊符号的情況

比如

?