2014-09-01 135 views
0

我有一個文本字段,我需要找到每個以#hashtag開頭的關鍵字(可以有多個關鍵字),並用鏈接替換它已存在的對象(如果存在)。查找並替換正則表達式

所以我必須對hashtag做一個find,如果它存在替換它的鏈接。

#goofy如果存在,應替換爲http://www.test.com/i/goofy

RegEx:/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i

什麼是最好的方法來解決這個問題?

我被困在我如何替換關鍵字的每個實例,我發現,與鏈接。

+0

什麼'#(\ S +)',http://regex101.com/r/vW2pQ7/9? – 2014-09-01 16:03:22

+0

正則表達式工作正常(WIP異常處理什麼我不想包括)。我被困在如何取代它。 – 2014-09-01 16:05:17

+0

我認爲你需要使用gsub命令.. – 2014-09-01 16:05:59

回答

1

您可以使用String#gsub

re = /(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i 

"#goofy".gsub(re, 'http://www.test.com/i/\1') 
#=> "http://www.test.com/i/goofy" 

\1指的是第一個捕獲組。

似乎與你的正則表達式的問題,但:

"123 #goofy".gsub(re, 'http://www.test.com/i/\1') 
#=> "123http://www.test.com/i/goofy" 
#  ^no whitespace 
+0

將微調正則表達式。這應該適用於多個實例嗎?這似乎是把原始的HTML在那裏破:gsub(re,#\1)我確定我缺少一些基本的東西:P – 2014-09-01 16:18:02

+0

你缺少引號:'gsub(re,'#\1')' – Stefan 2014-09-01 16:20:33

+0

哦哇...非常感謝Stefan – 2014-09-01 16:21:34