正则表达式允许一个句子中的多个工作

Regex allow multiple work in a sentence

我正在尝试使用正则表达式解析以下句子 (javascript):

目前我正在尝试:I(\b[a-zA-Z]*\b){0,5}(TV|chocolate|fire) 但它不起作用。我也用 \w 做了一些测试,但没有成功。

我想允许 "I" 和最后一个词 之间的任何词(最多 5 个词)是预定义的。

你需要在 I 后面添加空格。否则它不会捕获整个句子。

I(\b[a-zA-Z ]*\b){0,5}(TV|chocolate|fire)

我想测试正则表达式的网站是 regexr

要考虑单词之间的非单词字符,您可以使用

/I(?:\W+\w+){0,5}\‌​W+(?:TV|chocolate|fir‌​e)/

regex demo

重点是您添加了单词边界,但没有考虑 "words".

之间的空格、标点符号等(所有其他非单词字符)

图案详情:

  • I - 匹配左分隔符
  • (?:\W+\w+){0,5}\‌​W+ - 匹配 0 到 5 个序列(由于 limiting quantifier {n,m})1+ 个非单词字符(\W+)和 1+ 个单词字符(\w+),最后的 \W+ 匹配 1 个或多个必须存在的非单词字符,以将最后匹配的单词字符与...
  • 分开
  • (?:TV|chocolate|fir‌​e) - 匹配结尾分隔符

如果您不关心空格,请使用:

/I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/

尝试

/I\s+(?:\w+\s+){0,5}(TV|chocolate|fire)/

(Test here)

基于 Stefan Kert 版本,但依赖于每个额外单词的右侧空格而不是单词边界。

它也接受任何长度的任何有效 "word" (\w) 字符词和任何有效的空格字符(不考虑重复)。