我有一些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>
我不确定这可以一次完成。优先级是确保链接的目标设置为空白。
答案 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>');