正则表达式包装词

时间:2015-11-29 17:43:54

标签: regex

Regex example

如何在每场比赛中排除第一个空格?

相同的正则表达式:(?:^|\W)#(\w+)(?!\w)

1 个答案:

答案 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