【问题标题】:Regex wrapping word正则表达式包装词
【发布时间】:2016-03-03 08:07:32
【问题描述】:

Regex example

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

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

【问题讨论】:

标签: regex


【解决方案1】:

这是你要找的吗?
http://regexr.com/3ca98

从您到现在为止给我们的信息来看,这个正则表达式应该也足够了:#(\w+)(?!\w)
但也许它比我们知道的更多。您想通过(?:^|\W) 实现什么目标?

编辑:考虑到您可能想要实现的目标,我突然想到,如果它不在另一个单词的中间(例如test#case),您可能只会匹配您的模式。你可能不想匹配这个。
要排除这种情况,您必须确保它前面有某种空白字符,或者换句话说:除了空白字符或什么都没有。

我假设您使用 javascript,因为 regexr.com 确实如此,遗憾的是,在 javascript 正则表达式实现中没有可用的正则表达式后视。因此,没有真正的选择可以确保您的模式前面没有任何内容或空白。
一种解决方案是使用捕获组。使用这个正则表达式:
(?:^|\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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2011-03-28
    • 2015-11-05
    • 2016-12-07
    • 1970-01-01
    相关资源
    最近更新 更多