有偿帮忙写一段js 正则

发布于 2022-09-07 20:47:53 字数 494 浏览 11 评论 0

是想用户可以发布链接和图片,但是不能发送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;
});

这样是可以的 但是如果用户发布了 < 或者 > 这些就会被替换成html实体;

求大神写一段 可以以发布链接和图片,但是不能发送html和css样式,但是可以发布 < > 这样的字符

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日 2022-09-14 20:47:53
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, '<')
.replace(/>/g, '>')
.replace(/\{~~/g, '<')
.replace(/~~\}/g, '>');
霊感 2022-09-14 20:47:53

就是把一段文本中除了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替换为转义符
  // 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 `<${selfClosing}${tag}${content}${closing}>`
    }
  })

  console.log(text)
})()

如果对的话,也别什么有偿了,觉得对你有帮助的话,点个follow也是极好的:https://github.com/Jiasm

緦唸λ蓇 2022-09-14 20:47:53

/<(?:(?:div|select|label|volist|option)|/|html|meta|script |head|form |ul|li|input |a|br|t )[^>]+>/g

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文