2013-02-18 56 views
1

我有一个CONTENTEDITABLE DIV,当用户按下空格或粘贴到它,它的搜索内容的URL(通过正则表达式),其获得与取代:正则表达式的网址不包含在标签

<a href="' + url + '" title="' + url + '" target="_blank" class="label label-info label-url" contenteditable="false">url: \'' + url + '\'</a>&nbsp;

,它的工作原理。

的问题是,当你去书写或粘贴,在三个URL在<a>标签将再次得到evaluted和替代内容,造成混乱,所以我需要一种方法来避免它们被evaluted,通过更改正则表达式(它应该忽略前面href=",title="url: ')或更改js。

的jsfiddle:http://jsfiddle.net/YUekd/

+0

你有试过什么吗? – 2013-02-18 17:51:49

回答

1

第一个问题是,有在JS正则表达式引擎没有负回顾后。但是你可以使用一个回调函数与replace方法,这样做:

html = html.replace(
    /(href="|title="|url:)?(yoururlregex)/ig, 
    function($0, $1, $2) { 
     return $1 
      ? $0 
      : '<a href="' + $2 + '" title="' + $2 + '">url: ' + $2 + '</a>'; 
    } 
); 

我换成你的URL的正则表达式与常量字符串,使其更清晰,可以替代你的正则表达式插入括号。

编辑:在哪里放置match

function($0, $1, $2) { 
     if ($1) { 
      return $0; 
     } else { 
      match = true; 
      return '<a href="' + $2 + '" title="' + $2 + '">url: ' + $2 + '</a>'; 
     } 
    } 
+0

酷,我得到它的工作,你会把我的原始匹配=真的;线寿? – 2013-02-18 18:16:24

+0

我认为你可以省略'match'检查,但为了少插入HTML,我添加了一个带'match'变量集的回调函数版本。 – migg 2013-02-18 18:22:18

+0

只是为了解发生了什么:$ 2是url,$ 1是第一个括号匹配(href,title或url),$ 0是两者的组合吗? – 2013-02-18 18:45:41