Possible Duplicate:
07000
我使用正则表达式来查找泛型字符串中的链接并突出显示该文本(下划线,href,任何内容).
这是我到目前为止所拥有的:
var linkRegEx:RegExp = new RegExp("(https?://)?(www\\.)?([a-zA-Z0-9_%]*)\\b\\.[a-z]{2,4}(\\.[a-z]{2})?((/[a-zA-Z0-9_%]*)+)?(\\.[a-z]*)?(:\\d{1,5})?","g"); var link:String = 'generic links: www.google.com http://www.yahoo.com stackoverflow.com'; link = addLinks(linkRegEx,link); textField.htmlText = link;//textField is a TextField I have on stage function addLinks(pattern:RegExp,text:String):String{ while((pattern.test(text))!=false){ text=text.replace(pattern,"<u>link</u>"); } return text; }
我将所有文本替换为“链接”.我想要使用与expresion相匹配的相同文本而不是“link”.我试过了
text=text.replace(pattern,"<u>"+linkRegEx.exec(text)[0]+"</u>");
但我遇到了麻烦.我不认为我完全理解正则表达式和替换方法是如何工作的.
解决方法
好的,我已经阅读了
replace()方法的文档.
有两个关键的事情:
>你可以使用$&获取匹配的子字符串.那里有很多方便和怪异的符号.
>更换时使用第二根绳子,否则你会陷入无尽的环状,小黑色的整体会不时地产生.
以下是该函数的正确版本的外观:
function addLinks(pattern:RegExp,text:String):String{ var result = ''; while(pattern.test(text)) result = text.replace(pattern,"<font color=\"#0000dd\"><a href=\"$&\">$&</a></font>"); if(result == '') result+= text;//if there was nothing to replace return result; }
正如Cay所提到的,样式表更适合于造型.
感谢您的投入.
UPDATE
当链接包含#符号时,上面列出的RegEx不起作用.
这是该功能的更新版本:
function addAnchors(text:String):String{ var result:String = ''; var pattern:RegExp = /(?<!\S)(((f|ht){1}tp[s]?:\/\/|(?<!\S)www\.)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/g; while(pattern.test(text)) result = text.replace(pattern,"<font color=\"#0000dd\"><a href=\"$&\">$&</a></font>"); if(result == '') result+= text;//if there was nothing to replace return result; }