使用javascript和regex将原始html转换为文本

Convert raw html to text with javascript and regex

本文关键字:html 转换 文本 原始 javascript regex 使用      更新时间:2023-09-26

我有链接标签的原始html,我想要实现的目标是从标签和标签之间的所有文本中提取href属性,除了标签。例如:

<br>#EXTINF:-1 tvg-name="1377",Страшное HD<br>
<a title="Ссылка" rel="nofollow" href="http://4pda.ru/pages/go/?u=http%3A%2F%2F46.61.226.18%2Fhls%2FCH_C01_STRASHNOEHD%2Fbw3000000%2Fvariant.m3u8%3Fversion%3D2" target="_blank">http://46.61.226.18/hl…variant.m3u8?version=2</a>
<br>#EXTINF:-1  tvg-name="983" ,Первый канал HD<br>
<a title="Ссылка" rel="nofollow" href="http://4pda.ru/pages/go/?u=http%3A%2F%2F46.61.226.18%2Fhls%2FCH_C06_1TVHD%2Fbw3000000%2Fvariant.m3u8%3Fversion%3D2" target="_blank">http://46.61.226.18/hl…variant.m3u8?version=2</a>

必须转换为:

#EXTINF:-1 tvg-name="1377",Страшное HD
http://4pda.ru/pages/go/?u=http%3A%2F%2F46.61.226.18%2Fhls%2FCH_C01_STRASHNOEHD%2Fbw3000000%2Fvariant.m3u8%3Fversion%3D2
#EXTINF:-1  tvg-name="983" ,Первый канал HD
http://4pda.ru/pages/go/?u=http%3A%2F%2F46.61.226.18%2Fhls%2FCH_C06_1TVHD%2Fbw3000000%2Fvariant.m3u8%3Fversion%3D2

我尝试了不同的正则表达式:

这是我所做的

  1. var source_text = $("#source").val();

  2. var delete_start_of_link_tag = source_text.replace(/<a(.+?)href="/gi, "");

    • 删除href属性的开头标签
  3. var delete_tags = delete_start_of_link_tag.replace(/<'/?'w+(('s+'w+('s*='s*(?:".*?"|'.*?'|[^'">'s]+))?)+'s*|'s*)'/?>/gi, "");

    • 删除所有标签</a>, <br>

例子

然后我想删除所有href值之后的文本到行尾

我应该在替换方法中使用什么正则表达式,或者可能在哪里有一些不同的方法来做这种转换?

设置锚标签格式

在您的示例中,您没有替换html中的">部分。
检查这个例子

使用以下代码删除href('或")之后的所有内容

var delete_tags = delete_start_of_link_tag.replace(/".*/gi, "");

还有一些需要注意的是
1.href中的值用单引号(')或双引号(")括起来,两个都是有效的。
2.匹配给定字符串或内容中所有href的精确正则表达式是href=['"|'].*?['"|']
3.以下是我遇到的href值的一些模式。

  • http://www.so.com
  • https://www.so.com
  • www.so.com
  • //so.com
  • /socom.html
  • javascript*
  • mailto*
  • tel*

所以如果你想要格式化URL,那么你必须考虑上述情况,我可能错过了一些。

看起来你已经在使用jQuery了。

获取每个锚的href

$('a').each(function(){
    var href = $(this).attr('href');
});

获取每个锚的文本:

$('a').each(function(){
    var text = $(this).text();
});

您没有在这些元素周围显示包装器元素,但是您可以获得任何选择的文本(不带标记)。

var text = $('#some_id').text();
示例