怎么用正则去除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>
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");
})
经 @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
标签一样。
再说匹配a
和span
的闭标签:<\/span>\s*<\/a>
之后把这两部分用()
包起来,中间加上|
取或
希望能够帮到你 :P
只想得到href内的值
// 假如你上面那一堆字符串为 str
var res = /http:\/\/.+net\//g.exec(str)[0];
href内容为空:
str = str.replace(/http:.+net\//g, '');
算了,我放弃回答你这个题了,我也搞不清楚题主想要得到的结果是什么,题目改了得到一个-1的投票太令人伤心了。
学习一下正则表达式,你就知道应该怎么做了
很简单,把<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, ''); //只有文字的结果
var a = document.querySelector(...);
while (a.firstChild) a.parentNode.insertBefore(a.firstChild, a);
a.parentNode.removeChild(a);