例如,如何将纯 URL 替换为链接
How to replace plain URLs with links, with example?
我几乎可以正常工作了。 我想知道是否有更好的方法。
根本问题
小提琴
function replaceURLWithHTMLLinks(text) {
text = text.replace(/a/g, "--ucsps--");
text = text.replace(/b/g, "--uspds--");
var arrRegex = [
/('([^)]*'b)((?:https?|ftp|file):'/'/[-A-Za-z0-9+&@#'/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#'/%=~_()|])('))/ig,
/('([^)]*'b)((?:https?|ftp|file):'/'/[-A-Za-z0-9+&@#'/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#'/%=~_()|])(.?'b)/ig,
/()('b(?:https?|ftp|file):'/'/[-a-z0-9+&@#'/%?=~_()|!:,.;]*[-a-z0-9+&@#'/%=~_()|])(.?'b)/ig];
for (i = 0; i < arrRegex.length; i++) {
text = text.replace(arrRegex[i], "$1a$2b$3");
}
text = text.replace(/a([^b]*)b/g, "<a href='$1'>$1</a>");
text = text.replace(/--ucsps--/g, "a");
text = text.replace(/--uspds--/g, "b");
return text;
}
var elm = document.getElementById('trythis');
elm.innerHTML = replaceURLWithHTMLLinks(elm.innerHTML);
有什么想法吗?
在CodeReview上,这个问题得到了很好的回答。
function replaceURLWithHTMLLinks(text) {
var re = /('(.*?)?'b((?:https?|ftp|file):'/'/[-a-z0-9+&@#'/%?=~_()|!:,.;]*[-a-z0-9+&@#'/%=~_()|])/ig;
return text.replace(re, function(match, lParens, url) {
var rParens = '';
lParens = lParens || '';
// Try to strip the same number of right parens from url
// as there are left parens. Here, lParenCounter must be
// a RegExp object. You cannot use a literal
// while (/'(/g.exec(lParens)) { ... }
// because an object is needed to store the lastIndex state.
var lParenCounter = /'(/g;
while (lParenCounter.exec(lParens)) {
var m;
// We want m[1] to be greedy, unless a period precedes the
// right parenthesis. These tests cannot be simplified as
// /(.*)('.?').*)/.exec(url)
// because if (.*) is greedy then '.? never gets a chance.
if (m = /(.*)('.').*)/.exec(url) ||
/(.*)(').*)/.exec(url)) {
url = m[1];
rParens = m[2] + rParens;
}
}
return lParens + "<a href='" + url + "'>" + url + "</a>" + rParens;
});
}
注意:我在"var re"中的"@"符号有错误 - 我只是用@@替换了它
猜这个问题已经在这里回答了
function replaceURLWithHTMLLinks(text) {
var exp = /('b(https?|ftp|file):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
相关文章:
- 将url替换为链接,但添加了困难
- 如何在 jQuery 中将 HTML 标记的 HREF URL 替换为不完整的属性
- Javascript将url替换为字符串
- 将字符串中的URL替换为包含匹配URL的HTML字符串的Handlebar帮助程序
- 通过 JavaScript 和正则表达式将图像 URL 替换为文本 URL
- 例如,如何将纯 URL 替换为链接
- 如果域匹配,请将纯 URL 替换为链接
- URL 替换为锚点,而不是替换现有锚点
- AngularJS:当数据未加载时,将模板URL替换为404页面URL
- 将字符串中的 url 替换为 href 链接 - 适用于多种地址类型
- javascript正则表达式url替换
- execCommand()将url替换为./
- Javascript:用另一个URL替换URL内容字符串
- YouTube使用JavaScript和jQuery将url替换为视频ID
- 如何使用JavaScript将文本节点中的纯文本图像url替换为img元素
- 用完整的url替换根相对链接
- 将普通url替换为文本被截断的链接
- 将css background-image: url(…)替换为
标签,并继续滚动效果
- Javascript不能用URL替换字符串
- 根据页面URL替换页面上的文本