我正在寻找一个'做'列出使用JavaScript的应用程序。 当存在https,https或ftp时,其中一个函数会将文本转换为超链接。
如果我的文字包含#后跟任意5位数字,我想扩展它,这也成为一个链接。该网址应为http://192.168.0.1/localsite/testschool/search.php?id=ID
其中ID是#和5位数字。
这是当前的Javascript:
function prepareHtml(s)
{
// make URLs clickable
s = s.replace(/(^|\s|>)(www\.([\w\#$%&~\/.\-\+;:=,\?\[\]@]+?))(,|\.|:|)?(?=\s|"|<|>|\"|<|>|$)/gi, '$1<a href="http://$2" target="_blank">$2</a>$4');
return s.replace(/(^|\s|>)((?:http|https|ftp):\/\/([\w\#$%&~\/.\-\+;:=,\?\[\]@]+?))(,|\.|:|)?(?=\s|"|<|>|\"|<|>|$)/ig, '$1<a href="$2" target="_blank">$2</a>$4');
};
使用prepareHtml(item.title)
知道我怎么能这样做吗?
我已经计算出正则表达式以匹配#和5位是^#([0-9]{5})
,但我不确定如何在函数中实现它。
由于
答案 0 :(得分:1)
在我看来,模式&amp;替换字符串可以简化一下。
function urls2links(s)
{
return s.replace(/(^|[\s>])(www\.)/gi, '$1http://$2')
.replace(/\b(((https?|ftps?):\/{2})(\S+?))(?="|<|>|[\s<>\"]|$)/ig, '<a href="$1" target="_blank">$1</a>');
};
var str = 'blah http://192.168.0.1/localsite/testschool/search.php?id=#12345 \nblah www.foo.com/bar/" blah';
console.log('--\n-- BEFORE\n--');
console.log(str);
console.log('--\n-- AFTER\n--');
console.log(urls2links(str));
&#13;
虽然我不太确定需要在前瞻中包含字符实体|"|<|>
。
但我猜测你也处理编码的字符串。