转一个面试题,求解答

cn00439804 2011-06-07 11:24:01
请写一个函数按需求将字符串中的某些字符替换。
需求1:将以http://开头或者rss://开头的直到结束的字符段替换为<a>链接。
需求2:开头必须有空格(nbsp;等同于空格)或者<br/>算一个字符段的开始,第一个字符段可以没有
空格或者<br/>,结尾有空格或者<br/>算一个字符段的结束,否则直到字符串结束才算结束。

For Example:

'http://y.com.cn test1<br/>test2    rss://a.comghhttp://<br/>http://b.net http://c.cc<br/>test3'

Results:(为了方便阅读,特意换行了)
'<a href="http://y.com.cn">http://y.com.cn</a> test1<br/>test2    
<a href="rss://a.com ghhttp://">rss://a.comghhttp://</a><br/>
<a href="http://b.net">http://b.net</a> <a href="http://c.cc">http://c.cc</a><br/>test3'

测试页面:

<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<style>a{color:#f30;}</style>
</head>
<body>
<div>
<textarea id="a" style="border:1px solid #ccc;width:300px;height:140px;"></textarea>
<input type="button" id="b" value="转换" />
<div id="c"></div>
</div>
<script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript"></script>
<script src="http://files.cnblogs.com/shuicaituya/htmlEncode.js" type="text/javascript"></script>
<script>
$("#a").val('http://y.com.cn test1\rtest2 rss://a.comghhttp://\rhttp://b.net http://c.cc\rtest3');
$("#b").bind("click",function(){
var input = htmlEncode($.trim($("#a").val()));
var reg = /((?:(?:https?)|(?:rss)):\/\/[\w\.]+?)(?: |(?:<br\/>)|(?: ))/g;
var output = input.replace(reg,"<a href=\"$1\">$1</a>");
$("#c").html(output);
})
</script>
</body>
</html>


调试结果:


求助:
正则没有符合要求,求更好的正则。

...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
webphoenix 2011-06-07
  • 打赏
  • 举报
回复
参考:

var reg = /(\s|^|<br\/>)((?:http|https|rss)\:\/\/(?:[^<\s]+))($|\s|<br\/>)/ig;

var str = 'http://y.com.cn test1<br/>test2    rss://a.comghhttp://<br/>http://b.net http://c.cc<br/>test3';
var ss = str.replace(reg,function($0,$1,$2,$3) {
return $1+'<a href="'+$2+'">'+$2+'</a>'+$3;
});
document.write(ss);




cn00439804 2011-06-07
  • 打赏
  • 举报
回复
1楼的代码接近了,测试还有点不对,贴图,能帮忙再改下不
失去乐山贼 2011-06-07
  • 打赏
  • 举报
回复
友情帮顶。
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100题案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100题的案只整理到了前60题(第1-60题案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40题的案。只是 因个人认为:一、案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试题:九月腾讯,创新工场,淘宝等公司最新面试十三题、十月百度,阿里巴巴,迅雷搜狗 最新面试十一题);三、个人正在针对那100题一题一题的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40题的案迟迟未得整理。且个人已经整理的前60题的案,在我看来,是有诸多问 题与弊端的,甚至很多案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 做的全部100题的案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40题的案,因为前60题的案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的案再稍加整理番,然后把全部100题的 案现今都贴出来。若有任何问题,欢迎不吝指正。谢谢。 上千上万的人都关注过此100题,且大都都各自贡献了自己的思路,或回复于微软100题维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....

87,914

社区成员

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

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