js 去a标签留内容

怎么用正则去除a标签,只留下内容 http://git.oschina.net
将a标签部分替换为空的方式,不是直接取a标签的内容,因为有很多这样的代码,而且还有其它代码要留在原地

<a href="http://git.oschina.net/" style="box-sizing: border-box; color: rgb(51, 51, 51); text-decoration: none; transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); -webkit-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); max-width: 100%;  transparent;"><span data-wiz-span="data-wiz-span" style="box-sizing: border-box; max-width: 100%; font-size: 14pt;">http://git.oschina.net</span></a>
阅读 10.1k
6 个回答

@vimac 答案的指点,觉得现在最合适的方式:

(<\/?a.*?>)|(<\/?span.*?>)

也就是:

str.replace(/(<\/?a.*?>)|(<\/?span.*?>)/g, '');

运行结果


以下为废弃答案,就不加del标签了。答案是正确的,不过在上面写了更简洁的答案 :P

首先,你想要的正则表达式(匹配a标签和span标签,以及各自闭标签:

(<a\b[\w="\/\.\-\(\):;,% ]*>\s*<span\b[\w="\/\.\-\(\):;,% ]*>)|(<\/span>\s*<\/a>)

后面再解释每一部分的含义。
先说使用上(假设题主那段代码以字符串形式保存在str中:

str.replace(/(<a\b[\w="\/\.\-\(\):;,% ]*>\s*<span\b[\w="\/\.\-\(\):;,% ]*>)|(<\/span>\s*<\/a>)/g, '');

运行结果


匹配思路:
先说匹配a标签部分:
<a\b: 合法的a标签开头必然是"<a"
[\w="\/\.\-\(\):;,% ]*: 标签内的各种合法字符,出现0次以上;
>: 匹配已经匹配前面的正则匹配项后第一个>

\s*: 用来匹配<a><span>之间的空白字符;

然后匹配span标签部分,与匹配a标签一样。

再说匹配aspan的闭标签:
<\/span>\s*<\/a>

之后把这两部分用()包起来,中间加上|

希望能够帮到你 :P

很简单,把<a>里面的内容都干掉就是了,所以

var source = '<a href="http://git.oschina.net/" style="box-sizing: border-box; color: rgb(51, 51, 51); text-decoration: none; transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); -webkit-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); max-width: 100%;  transparent;"><span data-wiz-span="data-wiz-span" style="box-sizing: border-box; max-width: 100%; font-size: 14pt;">http://git.oschina.net</span></a>';
var reStripTagA = /<\/?a.*?>/g;
var textIncludeSpan = source.replace(reStripTagA, ''); //包括span的结果(只去掉了a)

var reStripTags = /<\/?.*?>/g;
var textOnly = source.replace(reStripTags, ''); //只有文字的结果

只想得到href内的值

// 假如你上面那一堆字符串为 str
var res = /http:\/\/.+net\//g.exec(str)[0];

href内容为空:

str = str.replace(/http:.+net\//g, '');

算了,我放弃回答你这个题了,我也搞不清楚题主想要得到的结果是什么,题目改了得到一个-1的投票太令人伤心了。

学习一下正则表达式,你就知道应该怎么做了

var html = '<a href="http://git.oschina.net/" style="box-sizing: border-box; color: rgb(51, 51, 51); text-decoration: none; transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); -webkit-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1); max-width: 100%;  transparent;"><span data-wiz-span="data-wiz-span" style="box-sizing: border-box; max-width: 100%; font-size: 14pt;">http://git.oschina.net</span></a>';

// 通过正则表达式取 href 部分    
var reg = /\s+href\s*=\s*"(.*?)"\s+/g.exec(html);

// 这个字符串应该就是你想要的
alert(reg[1]);

另外,如果你只是想取 href部分的值的话,也不是非得用正则来做,可以考虑成直接取a元素的href的属性的值,如,用jquery的话,可以使用

// aID 是那个a标签的ID
$("#aID").attr("href");

如果有多个a标签的话,可以考虑使用循环

var hrefs = [];
$("a").each(function(){
    hrefs[hrefs.length] = $(this).attr("href");
})
var a = document.querySelector(...);
while (a.firstChild) a.parentNode.insertBefore(a.firstChild, a);
a.parentNode.removeChild(a);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏