It's really hard to do this (I mean, its too broad), but I suggest you to do that in these few steps:
- first you should match all urls and store them in some array (e.g.
var urls = [];
)
- also replace then all urls with some unique characters sequence, which are not for sure in your browser's content (e.g.
~~~~~
)
- then do your clasical replace, like
document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
- and finally match in your new replaced browser's content all yours specials characters sequence (
~~~~~
) and replace them back in the same order with urls stored in your array (urls
).
Matching URLs:
About matching urls you need a good regex that matches urls. This is hard to do. See here, here and here:
...almost anything is a valid URL. There
are some punctuation rules for
splitting it up. Absent any
punctuation, you still have a valid
URL.
Check the RFC carefully and see if you
can construct an "invalid" URL. The
rules are very flexible.
For example :::::
is a valid URL.
The path is ":::::"
. A pretty
stupid filename, but a valid filename.
Also, /////
is a valid URL. The
netloc ("hostname") is ""
. The path
is "///"
. Again, stupid. Also
valid. This URL normalizes to "///"
which is the equivalent.
Something like "bad://///worse/////"
is perfectly valid. Dumb but valid.
Anyway, this answer is not meant to give you the best regex but rather a proof of how to do the string wrapping inside the text, with JavaScript.
OK so lets just use this one: /(https?:\/\/[^\s]+)/g
Again, this is a bad regex. It will have many false positives. However it's good enough for this example.
function urlify(text) {
var urlRegex = /(https?:\/\/[^\s]+)/g;
return text.replace(urlRegex, function(url) {
return '<a href="' + url + '">' + url + '</a>';
})
// or alternatively
// return text.replace(urlRegex, '<a href="$1">$1</a>')
}
var text = "Find me at http://www.example.com and also at http://stackoverflow.com";
var html = urlify(text);
// html now looks like:
// "Find me at <a href="http://www.example.com">http://www.example.com</a> and also at <a href="http://stackoverflow.com">http://stackoverflow.com</a>"
So in sum try:
$$('#pad dl dd').each(function(element) {
element.innerHTML = urlify(element.innerHTML);
});
I hope that it will do at least a little help for you.