zhangxinxu/quiz

JS基础测试46期

Opened this issue · 7 comments

如果sb前后否不是英文和数字,则过滤成**,如果前后是英文和数字,则忽略。
例如:你这个sb! -> 你这个**!
请访问jsbin. -> 请访问jsbin.


大家提交回答的时候,注意缩进距离,起始位置从左边缘开始;另外,github自带代码高亮,所以请使用下面示意的格式(1积分)。

```js
// 你的JS代码写在这里
 ```

本期小测会以要点形式进行回复。

const keywordFilter = (str) => {
  return str.replace(/\Wsb\W?/gi, (keyword) => {
    return keyword.replace('sb', '**')
  })
}

console.log(keywordFilter('你这个sb!'))
console.log(keywordFilter('请访问jsbin.'))

修改了下,单独的 sb 也能和谐掉了

const keywordFilter = (str) => {
  return str.replace(/.?sb.?/gi, (keyword) => {
    if (/\wsb/gi.test(keyword) && /sb\w/gi.test(keyword)) {
      return keyword
    } else {
      return keyword.replace('sb', '**')
    }
  })
}

console.log(keywordFilter('你这个sb!')) // 你这个**!
console.log(keywordFilter('请访问jsbin.')) // 请访问jsbin.
console.log(keywordFilter('sb')) // **
console.log(keywordFilter('j sb in')) // j ** in
zy017 commented
function filterKeyword(str, keyword='sb') {
  var reg = eval(`/(?<![0-9a-zA-z])${keyword}(?![0-9a-zA-z])/gi`)
  return str.replace(reg, '**')
}

console.log(filterKeyword('你这个sb!')) // 你这个**!
console.log(filterKeyword('请访问jsbin.')) // 请访问jsbin.
console.log(filterKeyword('sb')) // **
console.log(filterKeyword('sb! sb')) // **! **
var filterText = (str)=>str.replace(/(?!=\w|\d)sb(?!\d|\w)/g,'**')
console.log(filterText('请访问jsbin. sb 你这个sb!'))
function dirtyfilter (str) {
    return str.replace(/(?<!\d|\w)(sb|SB)(?!\w|\d)/g,'**')
}

console.log(dirtyfilter('你这个sb!')) // 你这个**!
console.log(dirtyfilter('请访问jsbin.')) // 请访问jsbin.
console.log(dirtyfilter('sb')) // **
console.log(dirtyfilter('sb! sb')) // **! **
var str = "你这个sb! sb sb! jsbin jsb sbi 个sb sb! SB JSBIN"
console.log(shield(str))
function shield(str, key = 'sb') {
  var reg = new RegExp(`(?<=[^0-z])${key}(?=[^0-z])`, 'gi')
  return str.replace(reg, '**')
}
/**
 * 屏蔽句子中的某些词
 * @param {string} sentence 待审核句子
 * @param {string} word 屏蔽词
 */
function filterWord (sentence, word) {
  const star = new Array(word.length).fill('*').join('')
  const reg = new RegExp(`((?<=\\W+)${word}(?=\\W+))|(^${word}(?=\\W+))|((?<=\\W+)${word}$)|(^${word}$)`, 'g')
  return sentence.replace(reg, star)
}

const demo = [
  '!!!sb',
  'sb!',
  'sb',
  'sbsbsbsb',
  '祖安问候:sb!',
  'holysb',
  '1sbc',
  'csb2',
  '#sb#'
]

demo.forEach(item => {
  console.log(filterWord(item, 'sb'))
})

正则是我的弱项,打个卡,惭愧了