Это решение работает, как и многие другие, и фактически использует одно и то же регулярное выражение, как и одно из них, однако вместо возврата строки HTML это вернет фрагмент документа, содержащий элемент A и любые применимые текстовые узлы.
function make_link(string) {
var words = string.split(' '),
ret = document.createDocumentFragment();
for (var i = 0, l = words.length; i < l; i++) {
if (words[i].match(/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi)) {
var elm = document.createElement('a');
elm.href = words[i];
elm.textContent = words[i];
if (ret.childNodes.length > 0) {
ret.lastChild.textContent += ' ';
}
ret.appendChild(elm);
} else {
if (ret.lastChild && ret.lastChild.nodeType === 3) {
ret.lastChild.textContent += ' ' + words[i];
} else {
ret.appendChild(document.createTextNode(' ' + words[i]));
}
}
}
return ret;
}
Есть некоторые предостережения, а именно, с более старой поддержкой IE и textContent.
здесь является демонстрацией.
Что означают (18) и (21) соответственно?
blockquote>Это значение
.vd_version
из соответствующего определения версии (ElfXX_Verdef
вelf.h
) , Например:readelf -Ws /bin/date | egrep ' (setenv|clock_gettime)' 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (5) 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.2.5 (3) readelf -V /bin/date ... Version needs section '.gnu.version_r' contains 1 entry: Addr: 0x0000000000000fd8 Offset: 0x000fd8 Link: 6 (.dynstr) 000000: Version: 1 File: libc.so.6 Cnt: 6 0x0010: Name: GLIBC_2.14 Flags: none Version: 7 0x0020: Name: GLIBC_2.4 Flags: none Version: 6 0x0030: Name: GLIBC_2.17 Flags: none Version: 5 0x0040: Name: GLIBC_2.3.4 Flags: none Version: 4 0x0050: Name: GLIBC_2.2.5 Flags: none Version: 3 0x0060: Name: GLIBC_2.3 Flags: none Version: 2
Обратите внимание, что
GLIBC_2.2.5
имеетVersion: 3
, аGLIBC_2.17
имеетVersion: 5
.