正则表达式,用于匹配行开头或空格字符后的模式

时间:2009-11-25 12:59:29

标签: ruby regex

我一直试图干掉以下与字符串中的hashtags匹配但没有成功的正则表达式:

/^#(\w+)|\s#(\w+)/i

这不起作用:

/^|\s#(\w+)/i

不,我不想在开头用逗号进行逗号:

/(^|\s)#(\w+)/i

我在Ruby中这样做 - 尽管我认为这不应该是相关的。

举一些匹配和不匹配字符串的例子:

'#hashtag it is'        # should match => [["hashtag"]]
'this is a #hashtag'    # should match => [["hashtag"]]
'this is not a#hashtag' # should not match => []

有什么建议吗?我在挑剔吗?

3 个答案:

答案 0 :(得分:5)

你可以使用。

/\B#(\w+)/i

"this is a #hash tag"      # matches
"#hash tag"                # matches
"this is not#hash tag"     # doesn't match

答案 1 :(得分:4)

/(?:^|\s)#(\w+)/i

?:前缀添加到第一个组将导致它不是匹配组,因此只有第二个组实际上是匹配组。因此,字符串的每个匹配将具有单个捕获组,其内容将是标签。

答案 2 :(得分:0)

这使用了后视,我不知道Ruby中是否支持外观(我听说它们在JavaScript中不受支持)

/(^#(\w+))|((?<= )#(\w+))/