поиск текста на странице через Regex
Добрый день.
Просматриваю большое количество научных статей через базы типа Scopus, где ссылки на оригинальные публикации представлены в виде DOI кода - 10.ХХХХ(Х)/bc.XXXXXX. При добавлении этого кода к гиперссылке http://dx.doi.org/<код DOI> происходит переход на страницу статьи. Идея моя в том, чтобы написать скрипт, который сам бы Regex'ом находил код на станице и подставлял в ссылку. Но загвоздка в том, как присвоить результат поиска переменной? Отзовитесь, кто знает :) |
Цитата:
|
Для себя можно так:
var selection = getSelection();
new Set(
document.body.textContent.match(/\b10\.[^\/\s]+\/[^\/\s]+/g)
).forEach(
match => {
while(find(match)){
var link = document.createElement('a');
link.href = 'http://dx.doi.org/' + match;
selection.getRangeAt(0).surroundContents(link);
}
selection.collapse(document.body);
}
);
window.scrollTo(0, 0);
Если текст простой - можно обойтись перебором текстовых нод. Если регулярка сложная - нужно добавить обработку случаев, когда одно совпадение находится в другом.) |
window.find поиск строки в документе
Aetae,
не знал даже об этом :thanks: https://developer.mozilla.org/en-US/...PI/Window/find
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
findString = function findText(text) {
var a = window.find(text);
alert("String \x22" + text + "\x22 found? " + a);
}
</script>
</head>
<body>
<p>Apples, Bananas, and Oranges.</p>
<button type="button" onClick='findString("Apples")'>Search for Apples</button>
<button type="button" onClick='findString("Banana")'>Search for Banana</button>
<button type="button" onClick='findString("Orange")'>Search for Orange</button>1234
</body>
</html>
|
document.body.innerHTML= document.body.innerHTML.replace(/\b10\.[^\/\s]+\/[^\/\s]+/gi, '<a href="http://dx.doi.org/$&">$&</a>'); |
j0hnik,
убил страницу, если там были назначены обработчики. |
рони,
Пиф паф рони, айм киллер! :D |
Цитата:
|
Спасибо всем за помощь!
В конечном виде код, который через букмарк запускаю на странице, такой (немного изменил паттерн поиска):
javascript: window.open( "http://doi.org/"+ document.body.textContent.match(/\b10\..{4}\/\S+\b/i))
Результат первого найденого DOI открывается в новом окне, что и требовалось. |
| Часовой пояс GMT +3, время: 20:23. |