Поиск и замена слов по списку
Приветствую!
Помогите пожалуйста написать скрипт поиска и замены слов по списку. Есть текст на странице к примеру:
=============== milk|Молоко cold juice|Сок холодный bananas|Бананы Milky Way|Милки вэй =============== Задача в том, что бы слова на странице сайта заменялись по правилам из списка list.txt который будет пополнятся. Переводимое слово или выражение должно совпадать полностью (но не учитывая регистр букв). Поиск совпадений должен производится с верху вниз по списку. В итоге после загрузки страницы будет:
Со скриптами знаком поверхностно, одному такую задачу не решить. Помогите пожалуйста. |
EvgenStor,
Эту задачу стоит решать на сервере. По крайней мере такую реализацию. Javascript тут не при чем. |
tsigel,
Спасибо за ответ! Не думал, что скриптом не получится. А через PHP тоже не получится? |
|
EvgenStor,
Я не говорил что не получится. эту задачу можно решить на js, но это будет не правильно. Правильнее делать это на сервере. |
Ruslan_xDD
можешь пояснить почему ты передаешь null $.get('list.txt', null, function(data) { почему не пишешь $.get('list.txt', function(data) { |
Цитата:
http://learn.javascript.ru/play/TqOAJ Можно как то подправить? Цитата:
|
EvgenStor,
http://learn.javascript.ru/play/SjNRic |
Poznakomlus, да я jQuery особо не пользуюсь, так что не знал, что так можно писать. :)
|
рони, Ruslan_xDD,
Благодарю за помощь! Вариант от рони меняет текст в тегах. Но есть одна проблема, когда я ввожу постепенно список поиска-замены все работает. Но как только я копирую полный список поиска-замены все перестает работать. Почему так происходит? Может какие то символы, цифры, пробелы, количество слов тормозят обработку? Посмотрите пожалуйста рабочий вариант, скажите что не так? :-? http://learn.javascript.ru/play/3DoSMb |
|
:write:
на всякий случай ... лучше конечно менять содержимое текстовых нод чтоб шкурку не попортить. :) |
Вот именно, то есть траверзить дерево и ковырять эти ноды. Ну там если бы перевод - понятно, а тут замена.
ТС, текст на странице откуда берется - там и заменяйте все. |
Цитата:
Цитата:
http://learn.javascript.ru/play/AyDk2b |
DBSM детектед.
|
Щас я вам покажу как это делается
UPDATE table SET column=REPLACE(column, from_str, to_str); Теперь самая мякотка: в екзеле делаете лист и разбиваете запрос на колонки UPDATE table SET column=REPLACE(column | from_str| to_str шланги изображают колонки Затем добавляете пустую колонку в А и там рисуете формулу СЦЕПИТЬ и сцепляете попутно добавляя в нее запятые и финальную скобку с двоеточкой. Копируете формулу и заполняете ей весь столбец. У вас получится список запросов на все замены. Копируете этот столбец, идете на хостинг, открываете phpMyAdmin или что у вас там (полагаю консоль вы не осилите) и выбрав пункт SQL вставляете и жмете GO. Готово, на всю жизнь сразу. |
Цитата:
|
kostyanet,
К сожалению ваш способ мне не подойдет Помогите привязать скрипт к конкретному class Попробовал сделать так http://learn.javascript.ru/play/48AaY но после обработки скриптом остается только тот участок кода который обрабатывается, а все остальное пропадает. :blink: |
EvgenStor, смотрите сообщение выше. :)
|
Ruslan_xDD,
Спасибо огромное! Теперь все тип-топ, классный скриптик получился :victory: Ruslan_xDD, рони, с меня на пиво Яндекс кошелек есть? :yes: |
Цитата:
Я уже несколько раз пытался раскрыть эту тайну - бесполезно. Как будто действительно данные берутся из мозга жанны агузаровой, а веб-дизайнерам ничего не остается как принимать и обрабатывать. |
Кстати, а роботы берут текст как файл, или ждут пока скрипт прочихуйется и тогда уже ковыряют текстовые ноды?
|
Ruslan_xDD, Спасибо за отличный скрипт! Подскажите, что нужно доработать, чтобы в заменяемое поле (в файле до черты) можно было вставить пары слов и они заменялись?
|
Подправьте пожалуйста яваскрипт, почему то скрипт со вчерашнего дня стал удалять открывающую скобу тега "<" , и весь текст получается вперемешку с кодом. http://plnkr.co/edit/ZvFbZDy4N5RTDo5DJ47S?p=preview
|
EvgenStor,
конец файла list.txt -- уберите последнюю строку --замены Цитата:
|
Во я лопухнулся, :lol: , бывает! Я почему то и не догадался на список замен обратить внимание, хотя как раз его менял на кануне.
рони спасибо выручил :thanks: :victory: ! |
Помогите подправить код, что бы он работал с несколькими блоками на странице. Сейчас он обрабатывает только один блок, а остальные игнорирует.
http://plnkr.co/edit/AHBJewTNJq4h8RuQJgdA?p=preview |
|
Спасибо рони, в очередной раз выручаешь! А можно как то сделать, что бы подгружаемые блоки после нажатия на кнопку "показать еще", тоже обрабатывались скриптом? К коду самой кнопки доступа нет.
http://plnkr.co/edit/mnJisSqbmks1J6lBRaS8?p=preview |
EvgenStor,
сделать можно, но помочь не могу, нужен другой специалист. |
Рони,
А если запускать скрипт по нажатии на кнопку "показать еще", с задержкой секунды на три, будет работать? |
Цитата:
|
EvgenStor, ниже это не код!!! а ...
$(function() { $.get("list.txt", function(data) { function fn() { [].forEach.call(document.querySelectorAll(".info"), function(elem) { var content = elem.innerHTML; data.replace(/^(.*?)\|(.*?)$/gm, function(a, b, c) { content = content.replace(new RegExp("(^|\\s|\\b)(" + b.replace(/[\\\/()*+.?|]/g, "\\$1") + ")(\\.|\\s|\\b|&|$)", "igm"), "$1" + c + "$3") }); elem.innerHTML = content }) } fn(); $("#page-more").on("click", "button", function() { window.setTimeout(fn, 3000) }) }) }); |
Доброе время суток,
Подправьте пожалуйста регулярку в скрипте. Дело в том, что скрипт меняет текст не только между тегами но и в самих тегах, в следствии чего ссылки становятся нерабочими. Т.е. если в ссылке href="" попадается слово подходящее под замену оно меняется, но адреса такого естественно нет. Исходная ссылка: <a href="/search/Serie%3A%20Acer%20Jade/" rel="nofollow" class="eTag">Серия: Acer Jade</a> Обработанная скриптом: <a href="/search/Серия%3A%20Acer%20Jade/" rel="nofollow" class="eTag">Серия: Acer Jade</a> Если возможно сделайте так, что бы скрипт обрабатывал только внутри любых тегов, т.е изменял содержимое между <любой тег>Текст для замены</любой тег> http://plnkr.co/edit/5S7Mv9YVP5NcciACfPbO?p=preview |
EvgenStor,
http://plnkr.co/edit/U5pEBOR8wrWQa8D2H36K?p=preview $(function() { $.get('list.txt', function(data) { [].forEach.call(document.querySelectorAll('.info'), function(elem) { var treeWalker = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, null, false); while (treeWalker.nextNode()) { var el = treeWalker.currentNode; data.replace(/^(.*?)\|(.*?)$/gm, function(a, b, c) { el.data = el.data.replace(new RegExp('(^|\\s|\\b)(' + b.replace(/[\\\/()*+.?|]/g, '\\$1') + ')(\\.|\\s|\\b|&|$)', 'igm'), '$1' + c + '$3'); }); } }); }); }); |
Спасибо рони, работает! Только скорость обработки стала почему то на много медленней, если раньше процесс занимал примерно 3 сек. после появления содержимого сайта, то теперь доходит до 17 сек. Почему так?
|
EvgenStor,
потому что меняет страницу на много раз больше |
Рони, можно с этим что то сделать, что бы сократить время обработки? Отблагодарю денежным вознаграждением за твою помощь. А то придется возвратится к старому варианту, без ссылок, поскольку такая задержка сильно замедляет просмотр страниц. Я не думал, что исключение тегов из поиска замены так сильно скажется на производительности, скорее наоборот предполагал, если скрипт исключит лишнее будет работать быстрее.
|
EvgenStor,
заменить на это и в строке 9 как можно точнее укажите где находится текст для перевода $(function() { $.get("list.txt", function(data) { data = data.match(/^(.*?)\|(.*?)$/gm).map(function(b) { b = b.split("|"); b[0] = new RegExp('(^|\\s|\\b)(' + b[0].replace(/[\\\/()*+.?|]/g, '\\$1') + ')(\\.|\\s|\\b|&|$)', 'igm'); b[1] = '$1' + b[1] + '$3' return b }); [].forEach.call(document.querySelectorAll(".info td, .info a"), function(elem) { data.forEach(function(b) { elem.textContent = elem.textContent.replace(b[0], b[1]) }) }) }) }); |
Рони,
Стал работать чуть быстрее 9-10 сек на сайте. В редакторе 5-6 сек. http://plnkr.co/edit/8KZn07P7leNW8YA40BbZ?p=preview Но стал переводить внутри слов Fuji FinePix > Fuji FвePix, Kompaktkamera > KoмpaktКамера Сайт у меня на https |
Часовой пояс GMT +3, время: 03:17. |