Замена подстроки с помощью регулярных выражений - PullRequest
1 голос
/ 03 июня 2009

Я хочу добавить вызов к событию onclick в любом href, который включает тег mailto:

Например, я хочу взять любой экземпляр:

<a href="mailto:user@domain.com">

И измените его на:

<a href="mailto:user@domain.com" onclick="return function();">

Проблема в том, что значение строки mailto не согласовано.

Мне нужно сказать что-то вроде замены всех экземпляров символа '>' на 'onclick="return function();">' в строках, которые соответствуют '<a href="mailto:*">'.

Я делаю это в ColdFusion с помощью функции REreplacenocase (), но общие рекомендации RegEx приветствуются.

Ответы [ 3 ]

3 голосов
/ 03 июня 2009

Следующее добавит ваш клик ко всем ссылкам mailto, содержащим строку str:

REReplaceNoCase(
    str,
    "(<a[^>]*href=""mailto:[^""]*""[^>]*)>",
    "\1 onclick=""return function();"">",
    "all"
)

То, что будет делать это регулярное выражение, - это найти любой тег <a ...>, который выглядит как ссылка электронной почты (т. Е. Имеет атрибут href с использованием протокола mailto), и добавить к нему атрибут onclick. Все до конца тега будет сохранено в первой обратной ссылке (на которую указывает \ 1 в строке замены), так что любые другие атрибуты в <a> будут сохранены.

2 голосов
/ 03 июня 2009

Если единственная цель - добавить обработчик событий JavaScript, я не думаю, что Regex - лучший выбор. Если вы используете JavaScript для подключения ваших событий JavaScript, вы получите более изящную деградацию, если JS недоступен (например, ничего не произойдет, вместо того, чтобы разбросать по клику по всей разметке).

Кроме того, использование DOM исключает возможность пропуска совпадений или ложных срабатываний, которые могут возникнуть в регулярном выражении, которое не полностью предвидит каждое возможное формирование разметки:

function myClickHandler() {
    //do stuff
    return false;
}

var links = document.getElementsByTagName('a');
for(var link in links) {
    if(link.href.indexOf('mailto:') == 0) {
        link.onclick = myClickHandler;
    }
}
1 голос
/ 04 июня 2009

Почему бы вам не сделать это на веб-интерфейсе с такой библиотекой, как jQuery ?

$(function(){
 $("a[href^=mailto]").click(function(){
  // place the code you want to execute here
 })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...