RegEx для изменения URL в htmlText as3 - PullRequest
1 голос
/ 27 августа 2009

У меня есть HTML-текст, который я установил в TextField во Flash. Я хочу выделить ссылки (либо другим цветом, либо просто используя подчеркивание, и убедитесь, что для цели ссылки установлено значение "_blank".

Я очень плох в RegEx. Я нашел удобное выражение на RegExr :

 </?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>

но я не мог его использовать.

С чем я буду иметь дело, это:

<a href="http://randomwebsite.web" />

Мне нужно будет сделать String.replace ()

чтобы получить что-то вроде этого:

<u><a href="http://randomwebsite.web" target="_blank"/></u>

Я не уверен, что это можно сделать за один раз. Приоритет - убедиться, что для ссылки установлено пустое значение.

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Я не знаю, как работают регулярные выражения Action Script, но, учитывая, что атрибуты могут появляться в любом месте тега, вы можете заменить <a target="_blank" href= на каждый <a href=.Может быть что-то вроде этого:

var pattern:RegExp = /<a\s+href=/g;
var str:String = "<a href=\"http://stackoverflow.com/\">";
str.replace(pattern, "<a target=\"_blank\" href=");  

Скопировано из документации Adobe, потому что я не очень разбираюсь в синтаксисе регулярных выражений AS3.

Теперь манипулирование HTML с помощью регулярных выражений обычно очень хрупко, но я думаю,может сойти с рук в этом случае.Во-первых, лучший способ стилизовать ссылку - использовать CSS, а не использовать тег <font>:

str.replace(pattern, "<a style=\"color:#00d\" target=\"_blank\" href=");  

Чтобы окружить ссылку другими тегами, необходимо capture все в <a ...>anchor text</a>, что в общем случае сопряжено с трудностями, потому что в нем может пойти почти все.

Другой подход заключается в использовании:

var start:RegExp = /<a href=/g;
var end:RegExp = /<\/a>/g;
var str:String = "<a\s+href=\"http://stackoverflow.com/\">";
str.replace(start, "<font color=\"#0000dd\"><a target=\"_blank\" href=");  
str.replace(end, "</a></font>");

Как я уже сказал, я никогда не использовал АС, и поэтому возьмите это с крошкой соли.Возможно, вам будет лучше, если у вас есть какой-либо способ манипулирования DOM.

Может показаться, что что-то подобное также работает:

var pattern:RegExp = /<a\s+href=(.+?)<\/a>/mg;
...
str.replace(pattern, 
    "<font color=\"#0000dd\"><a target=\"_blank\" href=$1</a></font>");
1 голос
/ 28 августа 2009

Я рекомендую вам этот простой инструмент тестирования http://www.regular -expressions.info / javascriptexample.html

Вот рабочий пример с более сложной входной строкой.

var pattern:RegExp = /<a href="([\w:\/.-_]*)"[ ]* \/>/gi;
var str:String = 'hello world <a href="http://www.stackoverflow.com/" /> hello there';
var newstr = str.replace(pattern, '<li><a href="$1" target="blank" /></li>');
trace(newstr);
0 голосов
/ 25 марта 2010

А как насчет этого? Я нуждался в этом для себя, и он ищет все ссылки (a-теги) с ot без цели.

var pattern:RegExp = /<a (  ( [^>](?!target) )*  ) ((.+)target="[^"]*")*  (.*)<\/a> /xgi;
str.replace(pattern, '<a$1$4 target="_blank"$5<\/a>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...