正则表达式匹配有限数量的单词

Regex match limited number of words

我需要用正则表达式匹配有限数量的单词。例如匹配一个句子中最多 2 个单词。

编辑:我正在使用 CoffeeScript 并尝试了

^([a-zA-Z0-9]+[^a-zA-Z0-9]*){1,3} 

这似乎适用于 http://rubular.com/r/ncNgZBo6Lq 但不适用于我的脚本。因此,此实现可能不支持它。

这取决于您使用的正则表达式实现以及您所说的 "word" 的确切含义。对您的请求的一种解释可以提供此正则表达式作为解决方案:

/(\w+)\W+(\w+)/

对于许多正则表达式引擎,\w 表示 "word character",而 \W 表示 不是 的任何字符 "word character"。与简单地寻找空格相反,它会选择仅由标点符号分隔的单词作为单独的单词,例如在 series-of-hyphenated-words 中。但是要小心,因为 "word character" 对您的正则表达式引擎的意义可能并不完全是您想要的意思。例如,上面可能将诸如 "don't" 之类的缩写算作两个单词(但也许没关系)。

更一般地说,如果您可以创建一个匹配每个人的正则表达式 "word"(无论这对您意味着什么)而不是其他任何东西,那么您可以形成一个正则表达式

/(one-word-regex)regex-for-what-can-separate-words(one-word-regex)/

.