2013-06-12 166 views
0

我正在使用jQuery autocomplete插件實現提及的我的Rails應用程序。如何替換具有特定格式的字符串部分?

這是包含的示例串提到,當一個更新提交:

- >你好肯尼斯Auchenberg其已久。告訴皮特萊西我會看看他明天

在服務器端我收到的字符串:

- >你好@肯尼斯Auchenberg](用戶:1)它已經長。 Tell @ [Pete Lacey](用戶:6)明天我會看到他

處理完這個字符串後, ,並與鏈接到他們的個人資料取代@[Kenneth Auchenberg](user:1)@[Pete Lacey](user:6)並刪除不必要的@[]()跡象,這樣得到的字符串可以像

- >你好Kenneth Auchenberg其已久。告訴Pete Lacey我會看看他明天

到目前爲止,所有我做的是隻得到了用戶名在方括號中:

string.scan(/\[([^\]]*)\]/) 

這給了我:

[["Kenneth Auchenberg"], ["Pete Lacey "]] 

我知道的在Ruby中的gsubscan函數,但我不能讓他們給我我想要的結果。我仍然是使用Ruby正則表達式的新手。做這個的最好方式是什麼?

+2

http://rubular.com/工作了正則表達式的時候是非常方便的。 – Narfanator

回答

1

我想這是實現清晰和自我證明的,因爲你作出明確你是有趣的正則表達式的模式:

s = 'Hello @[Kenneth Auchenberg](user:1) and @[Pete Lacey](user:6)!!!' 

s.gsub! /@\[(?<name>[\w\s]+)\]\(user:(?<userid>\d+)\)/ do 
    m = $~ # capture MatchData 
    name, id = m[:name], m[:userid] # read the parsed content 
    # do anything with them 
    ... 
    "<a href=\"/user/#{id}\">#{name}</a>" # replace by link 
end 
+0

非常感謝,這正是我一直在尋找的 –

1
string = "Hello @[Kenneth Auchenberg](user:1) its been long. Tell @[Pete Lacey](user:6) I will see him tomorrow" 

string.scan(/@\[(.*?)\]\(user:(\d+)\)/) 

回報:

[ 
    [ 
    "Kenneth Auchenberg", 
    "1" 
    ], 
    [ 
    "Pete Lacey", 
    "6" 
    ] 
] 
1

好吧,如果你知道怎麼寫了gsub功能,那麼我敢肯定,你可以使用正則表達式:

@\[([^\]\s]+)([^\]]+)\]\([^\)]+\) 

而更換通過:

[$1$2](site.com/user/$1) 

經測試here

\[([^\]\s]+)([^\]]+)\]部分是名稱。我已經把兩個捕獲組分開,以便稍後在鏈接中使用用戶名的兩部分。

第一個捕獲名字,第二個捕獲第二個名字。替換然後回調捕獲組並將它們放入新字符串中。