答案 0 :(得分:1)
这是你要找的吗?
http://regexr.com/3ca98
从你给我们的信息到现在,这个正则表达式也应该足够了:#(\w+)(?!\w)
但也许我们知道的更多。您希望通过(?:^|\W)
获得什么?
编辑:考虑到您可能想要达到的目标,我发现如果您的模式不在另一个单词的中间(例如test#case
),则可能只匹配您的模式。你可能不想匹配这个。
要排除这种情况,你必须要确保它前面有某种空白字符,换句话说:除了空格字符或什么都没有。
我假设您使用javascript,因为regexr.com确实令人遗憾,javascripts正则表达式实现中没有正则表达式后台可用。所以没有真正的选择来确保你的模式前面只有任何东西或空白。
一种解决方案是使用捕获组。拿这个正则表达式:
(?:^|\s+)(#\w+)
它会搜索模式前面的一个或多个空白字符或线段,但不会使用捕获组。然后你的模式就出现了,它是整个表达式中的第一个捕获组。
要在javascript中使用它,你需要实例化一个RegExp对象并使用它的函数exec,直到没有更多的匹配并将第一个捕获组保存到结果数组。
JS代码:
var txt = text.innerHTML;
var re = /(?:^|\s+)(#\w+)/g;
var res = [];
var tmpresult = [];
while ((tmpresult = re.exec(txt)) !== null) {
res.push(tmpresult[1]); // push first capture group to result stack
}
result.innerHTML = JSON.stringify(res, null, 2);
JSFiddle:https://jsfiddle.net/j41tw4hm/1/
更新了regexr.com: http://regexr.com/3ca9n