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

时间:2015-09-18 12:43:48

标签: javascript html regex

我有带链接标记的原始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>
  4. example

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

    我应该在替换方法中使用什么正则表达式,或者可能在哪种方式进行转换?

2 个答案:

答案 0 :(得分:0)

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

获取每个锚点的href

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

获取每个锚的文本:

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

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

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

Example

答案 1 :(得分:0)

格式化锚标记

在您的示例中,您没有从html替换">部分 请检查此example

使用此代码删除href close quote(&#39;或&#34;)

后的所有内容
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*

因此,如果您想格式化网址,那么您已经考虑了上述情况,我可能错过了一些。