正则表达式中的条件替换

时间:2012-03-15 23:29:05

标签: javascript regex

此正则表达式([a-zA-Z0-9]?(?:http[s]?://)?(?:(?:\w+)\.)(?:\S+)(?:\.(?:\w+))+?)成功找到字符串中http://www.msn.comwww.msn.commsdn.microsoft.comhttp://msdn.microsoft.com的任何内容。但是,我需要使用两种替换算法,一种是<a href=\"$1\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$1</a>,另一种是<a href=\"http://$1\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$1</a>请注意,区别在于字符串前缀为http://,这对于www.msn.com等链接是必需的。

但是,正在发生的事情是我使用替换语句的循环是搞乱的,因为如果它试图替换www.msn.com,则发现的第一次出现是http://www.msn.com,因此它会多次替换它 - 一旦找到http://的链接,一次找到www.msn.com的链接。

我有没有办法让一次性替换有条件地在必要时将http://添加到字符串中?

1 个答案:

答案 0 :(得分:4)

试试这个:

([a-zA-Z0-9]?http[s]?://)?((?:(?:\w+)\.)(?:\S+)(?:\.(?:\w+))+?)

并使用$2代替$1