请写一个函数按需求将字符串中的某些字符替换。
需求1:将以http://开头或者rss://开头的直到结束的字符段替换为<a>链接。
需求2:开头必须有空格(nbsp;等同于空格)或者<br/>算一个字符段的开始,第一个字符段可以没有
空格或者<br/>,结尾有空格或者<br/>算一个字符段的结束,否则直到字符串结束才算结束。For Example:'http://y.com.cn test1<br/>test2 &nbsp; &nbsp;rss://a.com ghhttp://<br/>http://b.net http://c.cc<br/>test3'Results:(为了方便阅读,特意换行了)
'<a href="http://y.com.cn">http://y.com.cn</a> test1<br/>test2 &nbsp; &nbsp;
<a href="rss://a.com ghhttp://">rss://a.com ghhttp://</a><br/>
<a href="http://b.net">http://b.net</a> <a href="http://c.cc">http://c.cc</a><br/>test3'

解决方案 »

  1.   

    var s='http://y.com.cn test1<br/>test2 &nbsp; &nbsp;rss://a.com ghhttp://<br/>http://b.net https://c.cc<br/>test3 http://d.cc&nbsp;';
    alert( s.replace(/((?:(?:https?)|(?:rss)):\/\/[\w\.]+?)(?: |(?:<br\/>)|(?:&nbsp;))/gi,"<a href=\"$1\">$1</a>\r\n") );
      

  2.   

    楼上的表面看是正确的,但最后一个貌似有问题。就是在匹配http://c.cc<br/>的时候,会把<br/>匹配进去。您用alert输出看一下就明白了,我写的也是这样问题,不知道怎么改。
      

  3.   

    lz举的例子的结果是不是有点问题?
    'http://y.com.cn test1<br/>test2 &nbsp; &nbsp;rss://a.com ghhttp://<br/>http://b.net http://c.cc<br/>test3'
    这里有空格,按理说应该是<a href="rss://a.com">rss://a.com</a>这个才对吧?
    var str="http://y.com.cn test1<br/>test2 &nbsp; &nbsp;rss://a.com ghhttp://<br/>http://b.net http://c.cc<br/>test3";
    var reg = /((http|rss).*?)(<br\/>|\s+)/g;
    alert(str.replace(reg,"<a href=\"$1\">$1</a>"));