【发布时间】:2013-11-02 01:02:29
【问题描述】:
我几乎完成了这项工作。我想知道是否有更好的方法。
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.stackexchange.com上会更合适
-
替换
innerHTML会很危险。尝试遍历树并仅替换每个元素的innerText。 -
看起来这永远不会完美,总会出现无法清除 URL 的情况。例如:(我的克鲁斯很糟糕:en.wikipedia.org/wiki/Images_of_me_:(.jpg)
-
Frits van Campen:我希望得到建设性的批评,这我已经知道了。 :)
标签: javascript regex