求正则表达式一个,替换href中的内容

Henry.6 2011-11-17 05:14:51
原始数据:
<p>
<a href="0">主页</a>><a href="A101">新页面1</a><a href="aa/A101">新页面1</a>
</p>

最后结果:
<p>
<a href="0">主页</a>><a href="A101">新页面1</a><a href="A101">新页面1</a>
</p>


自己写的一个/(href=").*?[/](.+?)(")/ig 替换为$1$3$4 老是不正确
...全文
451 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh161151 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 6rl 的回复:]
引用 7 楼 hh161151 的回复:
直接href.split("/")[1]不就行了吗,为什么非要用正则?

目的是去掉字符串的href中最后一个斜杠前面的内容(包括最后的斜杠)。不用正则行吗?
[/Quote]

var href = "aa/bb/cc/dd/A101";
var arr = href.split("/");
href = arr[arr.length-1];
诺维斯基 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 6rl 的回复:]

引用 6 楼 axiheyhey 的回复:
HTML code

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>&amp;gt;<a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页……
[/Quote]我只能说不是太好用,如果要是再有一个斜杠呢!?难道你再加一级?!我刚才我又写了一个,不过现在断网,我现在用的是手机!流量大大的浪费了,就为了给你一个满意的答案!看:/(href=\")([^<>]+?[\/]+){1,}/
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 axiheyhey 的回复:]
HTML code

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>&gt;<a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页面1</a>
</p>……
[/Quote]

三楼正确理解我意图:是javascript字符串操作,不是dom操作。
我自己又写了一个,不知道考虑是否周全,望各位大大指点。

var htmlContent = /'<p><a href="0">主页</a>&gt;<a href="A101">新页面1</a><a href="aa/A101">新页面1</a><a href="http://www.abc.com/aa/A101">新页面1</a></p>/ig
var pattern = /(href=")([^"]*)(?=\/)\/(.+?)(")/ig;
htmlContent = htmlContent.replace(pattern,"$1$3$4");




Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hh161151 的回复:]
直接href.split("/")[1]不就行了吗,为什么非要用正则?
[/Quote]
目的是去掉字符串的href中最后一个斜杠前面的内容(包括最后的斜杠)。不用正则行吗?
hh161151 2011-11-18
  • 打赏
  • 举报
回复
直接href.split("/")[1]不就行了吗,为什么非要用正则?
峭沙 2011-11-18
  • 打赏
  • 举报
回复
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>><a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页面1</a>
</p>
<script>
var as = document.getElementsByTagName('a');
for(var i = 0; i < as.length; i++){
var href = as[i].getAttribute('href');
href = href.replace(/.*\/+/g, '');
as[i].setAttribute('href', href);
}
</script>
</body>
</html>
峭沙 2011-11-18
  • 打赏
  • 举报
回复
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>><a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页面1</a>
</p>
<script>
var as = document.getElementsByTagName('a');
for(var i = 0; i < as.length; i++){
var href = as[i].getAttribute('href');
href = href.replace(/\/+/g, '');
as[i].setAttribute('href', href);
}
</script>
</body>
</html>
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 soonfei 的回复:]
JScript code

var str = '<p><a href="0">主页</a>&gt;<a href="A101">新页面1</a><a href="aa/A101">新页面1</a></p>';

var reg = /(href=\")[^<>\/]+?[\/]/;
var newstr = str.replac……
[/Quote]
这种就不适用了:多个斜杠。

<p>
<a href="0">主页</a>><a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页面1</a>
</p>

Henry.6 2011-11-18
  • 打赏
  • 举报
回复
这位大大,没说你写不好,相反是赞啊!!看清楚了。
[Quote=引用 19 楼 axiheyhey 的回复:]
引用 10 楼 soonfei 的回复:

引用 9 楼 6rl 的回复:

引用 6 楼 axiheyhey 的回复:
我只能说不是太好用,如果要是再有一个斜杠呢!?难道你再加一级?!我刚才我又写了一个,不过现在断网,我现在用的是手机!流量大大的浪费了,就为了给你一个满意的答案!看:/(href=\")([^<>]+?[\/]+){1,}/
你知道/g做什么用的吗?你试过我的代码了吗……
[/Quote]
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
你要是早这么写,我就清楚了。但是你先前写的这么隐晦,有多少人清楚?正则我用的地方,字符串不多,效率上可以忽略的。
[Quote=引用 20 楼 hh161151 的回复:]
引用 15 楼 6rl 的回复:
#11楼根本不对题。


到底是我不对题,还是你根本没看别人的代码呢?
不就去除/前面的吗,难道我这样就不行?


HTML code


<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>&gt;
……
[/Quote]
峭沙 2011-11-18
  • 打赏
  • 举报
回复
还有一种更简单的方式
		var str = '<p><a href="0">主页</a>&gt;<a href="A101">新页面1</a><a href="http:// aa/A101">新页面1</a></p>';
var elem_buff = document.createElement('div');
elem_buff.innerHTML = str;
var as = elem_buff.getElementsByTagName('a');
for(var i = 0; i < as.length; i++){
var href = as[i].getAttribute('href');
href = href.replace(/^.*?\/+(?=[^\/]*$)/, '');
as[i].setAttribute('href', href);
}
alert(elem_buff.innerHTML);
峭沙 2011-11-18
  • 打赏
  • 举报
回复
		var str = '<p><a href="0">主页</a>&gt;<a href="A101">新页面1</a><a href="aa/A101">新页面1</a></p>';
var linkElments = str.match(/<a\s+.*?<\/a>/g);
var reg = /(<a\s+(?:[^\<\>]+\s+)*?href=)([\'\"])(.+?)(\2.*?\>)/ig;
str = str.replace(reg, function(){
var args = arguments;
args[3] = args[3].replace(/^.*?\/+(?=[^\/]*$)/, "");
return args[1]+args[2]+args[3]+args[4];
});
alert(str);
hh161151 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 6rl 的回复:]
#11楼根本不对题。
[/Quote]

到底是我不对题,还是你根本没看别人的代码呢?
不就去除/前面的吗,难道我这样就不行?


<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>>
<a href="A101">新页面1</a>
<a href="aaa/A101">新页面1</a>
<a href="http://aaa/A101">新页面1</a>
</p>
<script>
var as = document.getElementsByTagName('a');
for(var i = 0; i < as.length; i++){
var href = as[i].getAttribute('href');
var arr = href.split("/");
href = arr[arr.length-1];
as[i].setAttribute('href', href);
}

for(var i = 0; i < as.length; i++){
console.log(as[i].getAttribute('href'));
}
</script>
</body>
</html>

就算你全不是dom,是字符串,你不能自己转换一下吗?

[code=HTML]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cn">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
<title></title>
</head>
<body>
<script type="text/javascript">

var str = '<a href="0">主页</a>><a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a href="http://aaa/A101">新页面1</a>';

var obj = document.createElement("div");
obj.innerHTML = str;

var as = obj.getElementsByTagName('a');
for(var i = 0; i < as.length; i++){
var href = as[i].getAttribute('href');
var arr = href.split("/");
href = arr[arr.length-1];
as[i].setAttribute('href', href);
}

for(var i = 0; i < as.length; i++){
console.log(as[i].getAttribute('href'));
}

</script>
</body>
</html>

技术是给人服务的,不要一味的追求技术,能用简单的方法就可以用简单的,再说你用正则来replace那么多的字符串,效率不知道有多慢。

[/code]
峭沙 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 soonfei 的回复:]

引用 9 楼 6rl 的回复:

引用 6 楼 axiheyhey 的回复:
我只能说不是太好用,如果要是再有一个斜杠呢!?难道你再加一级?!我刚才我又写了一个,不过现在断网,我现在用的是手机!流量大大的浪费了,就为了给你一个满意的答案!看:/(href=\")([^<>]+?[\/]+){1,}/
[/Quote]你知道/g做什么用的吗?你试过我的代码了吗?蛋疼
q107770540 2011-11-18
  • 打赏
  • 举报
回复
反向引用捕获组2
即: (['\"\s]?))
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 q107770540 的回复:]
JScript code

var html='your html';
var reg=/(<a[^>]*?href=(['\"\s]?))([^'\"]+)\/(?=[^\/]+\2)/gi;
html=html.replace(reg,'$1');
[/Quote]
\2 是什么意思?
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 q107770540 的回复:]
JScript code

var html='your html';
var reg=/(<a[^>]*?href=(['\"\s]?))([^'\"]+)\/(?=[^\/]+\2)/gi;
html=html.replace(reg,'$1');
[/Quote]
考虑很周全
Henry.6 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 soonfei 的回复:]
引用 9 楼 6rl 的回复:

引用 6 楼 axiheyhey 的回复:
HTML code

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<a href="0">主页</a>&amp;amp;gt;<a href="A101">新页面1</a><a href="aaa/A101">新页面1</a><a hre……
[/Quote]
非常好。

#11楼根本不对题。
q107770540 2011-11-18
  • 打赏
  • 举报
回复
var html='your html';
var reg=/(<a[^>]*?href=(['\"\s]?))([^'\"]+)\/(?=[^\/]+\2)/gi;
html=html.replace(reg,'$1');
hh161151 2011-11-18
  • 打赏
  • 举报
回复
一行split就可以搞定的事,为什么都非要用正则,不解.....
加载更多回复(4)

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧