Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.01.2018, 20:37
Новичок на форуме
Отправить личное сообщение для sylvio Посмотреть профиль Найти все сообщения от sylvio
 
Регистрация: 12.04.2016
Сообщений: 3

поиск текста на странице через Regex
Добрый день.
Просматриваю большое количество научных статей через базы типа Scopus, где ссылки на оригинальные публикации представлены в виде DOI кода - 10.ХХХХ(Х)/bc.XXXXXX. При добавлении этого кода к гиперссылке http://dx.doi.org/<код DOI> происходит переход на страницу статьи.
Идея моя в том, чтобы написать скрипт, который сам бы Regex'ом находил код на станице и подставлял в ссылку.
Но загвоздка в том, как присвоить результат поиска переменной?
Отзовитесь, кто знает
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2018, 20:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от sylvio
Но загвоздка в том, как присвоить результат поиска переменной?
непонятно с чем проблема?
Ответить с цитированием
  #3 (permalink)  
Старый 24.01.2018, 22:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Для себя можно так:
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);

Если текст простой - можно обойтись перебором текстовых нод.
Если регулярка сложная - нужно добавить обработку случаев, когда одно совпадение находится в другом.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 24.01.2018, 23:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

window.find поиск строки в документе
Aetae,
не знал даже об этом
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>
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2018, 00:49
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

document.body.innerHTML= document.body.innerHTML.replace(/\b10\.[^\/\s]+\/[^\/\s]+/gi,  '<a href="http://dx.doi.org/$&">$&</a>');
Ответить с цитированием
  #6 (permalink)  
Старый 25.01.2018, 01:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

j0hnik,
убил страницу, если там были назначены обработчики.
Ответить с цитированием
  #7 (permalink)  
Старый 25.01.2018, 01:19
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
Пиф паф рони, айм киллер!
Ответить с цитированием
  #8 (permalink)  
Старый 25.01.2018, 02:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Сообщение от рони Посмотреть сообщение
Aetae,
не знал даже об этом
Причём браузерописцы всё хотят его выпилить, а меж тем это пока единственный способ(не из 100500 строк) выбра текста на странице без учёта разметки. Подобный метод так и просится в спецификацию Range, но чего нет, того нет.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 25.01.2018, 12:34
Новичок на форуме
Отправить личное сообщение для sylvio Посмотреть профиль Найти все сообщения от sylvio
 
Регистрация: 12.04.2016
Сообщений: 3

Спасибо всем за помощь!
В конечном виде код, который через букмарк запускаю на странице, такой (немного изменил паттерн поиска):

javascript: window.open( "http://doi.org/"+ document.body.textContent.match(/\b10\..{4}\/\S+\b/i))


Результат первого найденого DOI открывается в новом окне, что и требовалось.

Последний раз редактировалось sylvio, 25.01.2018 в 12:41.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью скрипта высчитать ширину полосы прокрутки? LADYX Элементы интерфейса 35 13.11.2017 12:50
Поиск текста в блоке и добавление ему класса Venegrad Events/DOM/Window 2 08.02.2014 09:37
Поиск текста в 2х формах rusister Ваши сайты и скрипты 2 28.02.2013 15:01
Обновление текста на странице из символов Кирилицы Lucidmind jQuery 5 30.04.2011 17:39
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31