2009-02-23 16 views
3

我搜索了高和低,但不能aeem找到一個definitve答案。正則表達式經常出現這種情況。所以我想我會在這裏問。JavaScript正則表達式來封裝URL和郵件

我試圖把一個正則表達式放在一起,我可以在JavaScript中使用它來替換URL和電子郵件地址的所有實例(不需要非常嚴格),錨定標記指向它們。

很明顯,這通常是在服務器端完成的,但在這種情況下,需要使用純文本,因此在運行時執行替換操作的優雅JavaScript解決方案將非常完美。

ONL問題是,正如我以前所說,我有一個巨大的正則表達式狀張開在我的技能孔設置:(

我知道,你們中的一個,在你的指尖有答案雖然:)

回答

1

不是罐裝解決方案,但this將指向您正確的方向。

我使用Regex Coach來構建和測試我的正則表達式。你可以在網上找到大量的網址和電子郵件地址正則表達式的例子。

4

好,盲目地利用http://www.osix.net/modules/article/?id=586

var emailRegex = 
    new RegExp(
    '([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}' + 
    '\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.' + 
    ')+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)', 
    "gi"); 

var urlRegex = 
    new RegExp(
    '((https?://)' + 
    '?(([0-9a-z_!~*\'().&=+$%-]+:)?[0-9a-z_!~*\'().&=+$%-][email protected])?' + //[email protected] 
    '(([0-9]{1,3}\.){3}[0-9]{1,3}' + // IP- 199.194.52.184 
    '|' + // allows either IP or domain 
    '([0-9a-z_!~*\'()-]+\.)*' + // tertiary domain(s)- www. 
    '([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.' + // second level domain 
    '[a-z]{2,6})' + // first level domain- .com or .museum 
    '(:[0-9]{1,4})?' + // port number- :80 
    '((/?)|' + // a slash isn't required if there is no file name 
    '(/[0-9a-z_!~*\'().;?:@&=+$,%#-]+)+/?))', 
    "gi"); 

然後

text.replace(emailRegex, "<a href='mailto::$1'>$1</a>"); 

text.replace(urlRegex, "<a href='$1'>$1</a>"); 

力量正則表達式的工作

+0

emailRegex第一行略有變化: 將\移動到封閉上下文(更改順序)的末尾。 var emailRegex = new RegExp( '([a-zA-Z0-9 _ \。\ - ] +)@((\ [[0-9] {1,3}'+ '\。[0 -9] {1,3} \。[0-9] {1,3} \。)|(([a-zA-Z0-9 \ - ] + \''+ ')+))([ a-zA-Z] {2,4} | [0-9] {1,3})(1)'), 「gi」); – albertpeiro 2013-12-18 15:23:59

0

與往常一樣,這個( 「本」 是「用正則表達式處理HTML「)將變得困難且容易出錯。下面將只工作在相當好,形成的輸入,但這裏是我會做什麼:

  1. 找到你要處理的元素,把它的innerHTML屬性值
  2. 迭代發現一切已經一個鏈接(/(<a\b.+?</a>/ig)基於該
  3. ,砍你的字符串轉換成「這不是一個鏈接」 - 和「這是一個鏈接」比特,追加所有這些人到整齊orderd陣列
  4. 過程中的「非鏈接「位(那些不以"<a "開頭的)位,尋找URL-或電子郵件地址模式
  5. 包裹每個地址你<a>標籤
  6. join()陣列回字符串
  7. innerHTML屬性設置爲你的新的價值

我肯定找您將找到與電子郵件地址和URL匹配的正則表達式示例。以最適合你的爲準,並在步驟4中使用它們。)。

0

只需添加上的電子郵件正則表達式一點信息:大多數的他們似乎忽略了域名可以在其中包含角色'åäö'。因此,如果您關心這一點,請確保您使用的解決方案在正則表達式的域部分中有åäöÅÄÖ。