正则过滤标签并且保留标签里面的属性

新手上路,请多包涵

一个文本框里面的HTML 里面有文本和 img 标签
例如

<img src="../../static/images/express/4.gif" alt="[em_4]">好好研究研究这个方案真详细<img src="../../static/images/express/4.gif" alt="[em_4]">

要过滤成这样的

[em_4]好好研究研究这个方案真详细[em_4]

昨天查了好长时间都没查到, 正则不太行, 求助, 谢谢了

阅读 2.6k
3 个回答
✓ 已被采纳新手上路,请多包涵

受到 @ymsd 的启发, 用了下面的方式, 不过不是一个正则解决的, 但也达到了需求

 var str = '好好<img src="../../static/images/express/4.gif" alt="[em_4]">好研究研究这<img src="../../static/images/express/4.gif" alt="[em_4]">个方案真详细<img src="../../static/images/express/4.gif" alt="[em_4]">1111'

 var temp = str.replace(/<img.*?(?!alt=".*?")(>)/g, (match) => {
   return match.replace(/<img.*?(alt="(.*?)")(>)/g, '$2')
 })

结果

好好[em_4]好研究研究这[em_4]个方案真详细[em_4]1111

看看这个符合要求吗? 给个赞吧

var str = '<img src="../../static/images/express/4.gif" alt="[em_4]">好好研究研究这个方案真详细<img src="../../static/images/express/4.gif" alt="[em_4]">';
var result = str.replace(/^.+alt="(.*)">(.*)<.*alt="(.*)".*$/, '$1$2$3');
console.log(result);

http://regex.zjmainstay.cn/r/...

正则表达式主要用来处理字符串,你这个既然是DOM元素,为什么要用正则表达式呢?
可以使用JQuery:

var str = $('img:eq(0)').attr('alt') + $('img:eq(0)'). text() + $('img:eq(1)').attr('alt')

__

更新

题主给的是字符串,所以可以通过如下正则式取值:

reg1 = /\[.*?\]/g
reg2 = />.*?</g

var str = '<img src="../../static/images/express/4.gif" alt="[em_4]">好好研究研究这个方案真详细<img src="../../static/images/express/4.gif" alt="[em_4]">'
var text = str.match(reg2)[0]
var result = str.match(reg1)[0] + text.substring(1, text.length - 1) + str.match(reg1)[1]
console.log(result)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题