查找并替换正则表达式

查找并替换正则表达式

问题描述:

我有一个文本字段,我需要找到每个以#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

您可以使用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