Хочу удалить все лишние пробелы в названиях параметров about:config здесь, для чего с помощью Platypus создал такой вот RegEx для GreaseMonkey:

Выделить код

Код:

(?<=<strong>.*)\b. \b(?=.*</strong>)

Но почему-то он не работает, хотя работает в .NET. GreaseMonkey что ли не поддерживает ретроспективную проверку? Как правильно составить RegEx для удаления пробелов?

Поменял на

, теперь съедаются все вхождения ". ", а не только внутри <strong>.. :/  :(  Неужели никто не знает RegEx?

При загрузке страницы заметно не очень приятное мелькание, свидетельствующее о применении скриптов. От этого можно избавиться?

Не нашел, что такое Platypus, но что, если сделать так:
ищем <strong>(.*?)\.\ (.*?)</strong>
меняем на <strong>\\1.\\2</strong>

SOb
Удаляет только первый пробел.. Кстати, а зачем нужен escape перед пробелом?

Platypus!, или о чём мечтал Asa Dotzler.

SOb
Ну выражение такое и было:

Выделить код

Код:

platypus_do_function(window, 'do_modify_html',document.getElementById('content'),/<strong>(.*?)\. (.*?)<\/strong>/gi,'<strong>$1.$2</strong>',null);

, но ничего не изменилось. Убирается только первый пробел. Наверное, оттого, что механизм регулярных выражений находит первое вхождение <strong>(.*?)\. (.*?)</strong> в каждой строке и на этом успокаивается. Самый первый вариант хорош, но работает только в .NET, где возможностей RegEx побольше.

Никакой автоматики, всё руками, блин.
Вот работающий код для убирания этих пробелов.

Выделить код

Код:

var res = document.evaluate("//strong", 
                             document, 
                             null, 
                             XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
                             null);
var arr = [];
while (item=res.iterateNext()) {
  arr.push(item);
}
for (var i=0; i<arr.length; ++i) {
  arr[i].firstChild.nodeValue =
  arr[i].firstChild.nodeValue.replace(new RegExp("(.*?). (.*?)", "g"), "$1.$2");
}

Получаем все strong-и в XPathResult объект.
Потом перекидываем их в массив, т.к. если начать править прямо в XPathResult, то он развалится.
Ну и там уже исправляем, что хотели.

SOb
А почему RegEx поменялся? Это получается то же самое, что и \b\. \b?
Кстати, можно было не трудиться объяснять мне, как это работает. Я всё равно в JS совершенно не разбираюсь. :)

djet пишет

SOb
А почему RegEx поменялся? Это получается то же самое, что и \b\. \b?
Кстати, можно было не трудиться объяснять мне, как это работает. Я всё равно в JS совершенно не разбираюсь. :)

Нет, не то же самое. За счёт скобок мы и получаем $1 и $2.
Кстати, при работе кода возникают непонятные мне ошибки, так что лучше его переписать вот так:

Выделить код

Код:

var res = document.evaluate("//strong",
                             document,
                             null,
                             XPathResult.ORDERED_NODE_ITERATOR_TYPE,
                             null);
var arr = [];
while (item = res.iterateNext()) {
  arr.push(item);
}
for (var i=0; i<arr.length; ++i) {
  try {
    arr[i].lastChild.nodeValue =
    arr[i].lastChild.nodeValue.replace(new RegExp("(.*?). (.*?)", "g"), "$1.$2");
  } catch(e) {
    ++i;
  }
}

Тогда некоторые строчки в таблице останутся с пробелами.
А по поводу «не разбираюсь» - нужно думать и о других, которые чуть чуть разбираются. :)

SOb
Но результат ведь тот же: заменятся все вхождения ". ", причём не только внутри <strong>.

djet пишет

SOb
Но результат ведь тот же: заменятся все вхождения ". ", причём не только внутри <strong>.

В коде явно указано, что мы хотим работать только с элементами <strong>, сделано это параметром //strong к функции evaluate объекта document. Впрочем да, выражение действительно можно теперь записать проще RegExp("\. ", "g"), "."). :)

SOb
Понятно. Спасибо за решение. :) Работает нормально, только почему-то несколько строчек (browser. anchor_color, например) остались с пробелами. Может это GM глючит..

djet пишет

SOb
Понятно. Спасибо за решение. :) Работает нормально, только почему-то несколько строчек (browser. anchor_color, например) остались с пробелами. Может это GM глючит..

Нет, см. ещё раз пост #9 в этой ветке. :)
P.S.: И, конечно, пожалуйста за решение. :)

Да, время позднее, и в голове куча предэкзаменационной каши.. :rolleyes:

djet пишет

Да, время позднее, и в голове куча предэкзаменационной каши.. :rolleyes:

А я вот еще попутно WebMoney через GM натягивал. :) Натянул таки. :) Хорошая штука GM!

SOb
И много money натянул в итоге? lol.gif

Неплохо бы в wiki открыть раздел для скриптов GM.

djet пишет

SOb
И много money натянул в итоге? http://i2.ru-board.com/s/lol.gif

Неплохо бы в wiki открыть раздел для скриптов GM.

Интерес к теме WM нулевой. А для GM уже всё открыли - http://developer-test.mozilla.org/en/docs/Core_JavaScript_1.5_Reference и http://www.google.com