截取带标签字符串个数再返回

背景:转发微博//@游向王者目标:网友翻出<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font>35岁时的视频,视频中的<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font>好港好美,就算是将妆容放到现在也是复古时髦look#<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font><font color='red'>宣布</font><font color='red'>云南</font><font color='red'>映象</font><font color='red'>演出团队</font><font color='red'>解散</font>#游向王者目标的微博视频如上面所示字符串,由于展示计算问题,现在需要截取其中指定个数的文字,并且截取后是要带字符串的,怎么处理?
分析: 要实现上述要求,想到两种方式:方式一:对字符串进行循环匹配,当遇到<font>标签时,直接提取其中内容加上,如果加上后字数不足所要的,继续向后,如果超过所要的,向前再减去相应字数。方式二:将字符串转化为纯文本,截取对应字数的内容,再将<font>标签中的内容提取出来,与字符串进行匹配,若匹配到,则将内容替换成带标签的内容。
由于方式一性能过于差,最后取用方式二。
实现:

 const content = "转发微博//@游向王者目标:网友翻出<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font>35岁时的视频,视频中的<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font>好港好美,就算是将妆容放到现在也是复古时髦look#<font color='red'>杨</font><font color='red'>丽</font><font color='red'>萍</font><font color='red'>宣布</font><font color='red'>云南</font><font color='red'>映象</font><font color='red'>演出团队</font><font color='red'>解散</font>#游向王者目标的微博视频"
 const wordsCount = 10
//将带标签的内容处理为纯文本
 const ele = document.createElement('div');
 ele.innerHTML = content;
 const plainText = ele.innerText;
// 将带标签的关键词提取出
 let hightKeywords = [...new Set(Array.from(content.matchAll(/<font.+?>(.+?)<\/font>/g)).map(item => item[1]).filter(item => item))];
// 要返回的纯文字内容
 let limitContent = `${plainText.slice(0, wordsCount)}...`;
// 将关键词进行转义
 hightKeywords = hightKeywords.map(item => item.replace(/[.*+?^${}()| [\]\\]/g, '\\$&')).join('|');
// 回填标签
 limitContent = limitContent.replace(new RegExp(`(${hightKeywords})`, 'g'), (match) => `<font color='red'>${match}</font>`);
 return limitContent;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这是一个链接,其中 "http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml" 是链接地址,可以通过正则表达式或者字符串分割的方式提取出来。 ### 回答2: 要提取形如 href="http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml" 的字符串,首先需要知道该字符串的规律。根据给出的示例,我们可以看出该字符串是一个HTML标签中的属性值,该属性名为"href"。在HTML标签中,属性值通常都被引号包裹,所以我们可以通过查找双引号来提取该字符串。 以下是一个提取该字符串的示例代码: ```python import re text = 'href="http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml"' pattern = r'href="(.*?)"' # 使用正则表达式匹配 result = re.findall(pattern, text) print(result[0]) # 输出提取到的字符串 ``` 这段代码中,我们使用了Python的re模块,其中findall函数可以返回所有匹配的项,而pattern是一个正则表达式,用来匹配 href="..." 格式的字符串。通过执行re.findall函数,我们可以得到提取到的字符串。 以上示例代码只是一种方法,你也可以使用其他方式提取字符串,例如使用字符串截取、split等方法。不过使用正则表达式可以更方便地提取满足特定规则的字符串。 ### 回答3: 提取形如 href="http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml" 的字符串可以通过正则表达式来实现。假设该字符串出现在一个文本中,以下是使用Python编程语言的示例代码: ```python import re text = '这是一个样例文本,其中包含一个链接 href="http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml"。' result = re.findall(r'href="([^"]+)"', text) print(result) ``` 输出结果将会是:`['http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml']`。 正则表达式`href="([^"]+)"`的含义是:匹配以`href="`开头,以`"`结尾的字符串,并且提取中间的内容。`[^"]+`表示匹配连续多个非`"`字符。 以上是提取形如`href="http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml"`的字符串的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值