【问题标题】:Single regex to remove HTML tags and also the remaining whitespace单个正则表达式来删除 HTML 标记以及剩余的空格
【发布时间】:2020-03-11 17:10:19
【问题描述】:

我在一个无序列表中有一组颜色。它包含各种空格和换行符:

<li>blue</li><li>red</li>
<li>yellow</li>
<li>green </li><li>orange</li>
<li>purple</li><li>brown</li><li>black</li>

使用str.replace('&lt;.+?&gt;', ' '),我得到:

blue  red 
yellow 
green   orange 
purple  brown  black 

是否可以在不通过第二个正则表达式运行的情况下在原始正则表达式中合并空格删除(a la '\s+')?

我想要这样的数据:

blue red yellow green orange purple brown black

我知道用正则表达式修改HTML的注意事项,但这将是一个孤立的字符串发送到另一个应用程序。

【问题讨论】:

  • 用单个空格字符' ' 替换&lt;.+?&gt;|\s+ 怎么样?
  • @dvo 这仍然在单词之间留下多个空格。每个标签都会创建一个可能导致重复空格的空格。 ⁃blue⁃⁃red⁃⁃⁃yellow⁃⁃⁃green⁃⁃⁃orange⁃⁃⁃purple⁃⁃brown⁃⁃black⁃

标签: html regex tags whitespace removing-whitespace


【解决方案1】:

这应该会产生预期的效果。

str.replace(/(\s*<.*?>\s*)+/g, ' ').trim()

括号创建一个搜索组,因此组后有一个 + 表示匹配该组中的一个或多个。

对于显示的示例,每个标记前后的 \s* 是多余的,但我假设其他标记可能在标记内容之前或之后有空格,例如:

<li>green </li>

第一个和最后一个被空格替换的标签会在前后产生额外的空格,所以我们通过 trim() 将其删除。

【讨论】:

  • 谢谢,这真的很接近,但正如你所说,我仍然在字符串的开头和结尾有空格。我只需要将此保留为正则表达式...我无法更改代码以添加修剪。
【解决方案2】:
var stripedHtml = htmlString.replace(/<[^>]+>/g, '');

或遍历所有标签并获取它们的文本内容

【讨论】:

  • 您的正则表达式不会删除换行符,也不会在单词之间保留一个空格。
  • @Tony,是的,你是对的。去掉stripedHtml.trim()中的空格,因为可能有颜色,例如:浅绿色。
猜你喜欢
  • 2020-08-29
  • 2014-01-29
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多