在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ 有償幫忙寫一段js 正則

有償幫忙寫一段js 正則

是想用戶可以發(fā)布鏈接和圖片,但是不能發(fā)送html和css樣式!

目前的寫法是:

var result=str.replace(/(<\/?)([a-z]+)(\s[\w\W]*?)?(>)/ig,function(s0,s1,s2,s3,s4) {
   if (!/^(img|a)$/.test(s2))
  return "";
  if(s3)
  s3 = s3.replace(/\s+(id|class|style)(=(([\"\']).*?\4|\S*))?/g,"");
  return s1+s2+(s3||"")+s4;
});

這樣是可以的 但是如果用戶發(fā)布了 < 或者 > 這些就會被替換成html實體;

求大神寫一段 可以以發(fā)布鏈接和圖片,但是不能發(fā)送html和css樣式,但是可以發(fā)布 < > 這樣的字符

回答
編輯回答
熊出沒

就是把一段文本中除了a或者img以外的所有標簽都干掉,然后干掉a以及img中的css?
如果我沒有理解錯的話,大致是這樣的:

(() => {
  let str = `
  <p style="color: blued">text</p>
  <img src="XXX" style="color: red" />
  <a href="XXX" style="color: red" >Link</a>
  <p>text</p>
  `

  // 邏輯分兩塊:
  // 1. 將非`img`、`a`標簽的tag替換為轉(zhuǎn)義符
  // 2. 將`img`、`a`標簽中的`style`干掉

  let text = str.replace(/<(\/?)([\w]+)(.*?)(\/?)>/g, (_, selfClosing, tag, content, closing) => {
    if (['img', 'a'].includes(tag.toLowerCase())) {
      return `<${selfClosing}${tag}${content.replace(/style=".*?"/g, '')}${closing}>`
    } else {
      return `&lt;${selfClosing}${tag}${content}${closing}&gt;`
    }
  })

  console.log(text)
})()
如果對的話,也別什么有償了,覺得對你有幫助的話,點個follow也是極好的:https://github.com/Jiasm
2017年6月8日 07:29
編輯回答
蔚藍色
var result = str.replace(/<.*?>/g, function(v) {
  if(!/<(img|a|\/a)/g.test(v)){
    return '';
  }
  return v.replace(/\s+(id|class|style)\s*=\s*['"].*?['"]/ig,'')
      .replace('<', '{~~').replace('>', '~~}');
})
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\{~~/g, '<')
.replace(/~~\}/g, '>');
2017年11月30日 04:53