RegEx修改htmlText as3中的url

时间:2009-08-27 18:04:31

标签: regex actionscript-3 string formatting

我有一些html文本,我在flash中设置为TextField。我想突出显示链接(使用不同的颜色,只需使用下划线并确保链接目标设置为“_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 个答案:

答案 0 :(得分:2)

我不知道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 docs复制,因为我对AS3正则表达式语法知之甚少。

现在,通过正则表达式操纵HTML通常非常脆弱,但我认为在这种情况下你可以逃脱它。首先,设置链接样式的更好方法是通过CSS,而不是使用<font>标记:

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

要将链接与其他标记包围在一起,您必须 捕获 <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>");

正如我所说的那样,我从来没有使用过AS,因此请加上一粒盐。如果你有任何操作DOM的方法,你可能会更好。

这样的事情似乎也可以起作用:

var pattern:RegExp = /<a\s+href=(.+?)<\/a>/mg;
...
str.replace(pattern, 
    "<font color=\"#0000dd\"><a target=\"_blank\" href=$1</a></font>");

答案 1 :(得分:1)

我推荐你这个简单的测试工具 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);

答案 2 :(得分:0)

这个怎么样?我自己需要这个,它会找到没有目标的ot链接(a-tags)。

var pattern:RegExp = /<a (  ( [^>](?!target) )*  ) ((.+)target="[^"]*")*  (.*)<\/a> /xgi;
str.replace(pattern, '<a$1$4 target="_blank"$5<\/a>');