3

I'm trying to parse following sentences with regex (javascript) :

  • I wish a TV
  • I want some chocolate
  • I need fire

Currently I'm trying : I(\b[a-zA-Z]*\b){0,5}(TV|chocolate|fire) but it doesn't work. I also made some test with \w but no luck.

I want to allow any word (max 5 words) between "I" and the last word witch is predefined.

4

4 回答 4

4

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

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

查看正则表达式演示

关键是您添加了单词边界,但没有考虑“单词”之间的空格、标点符号等(所有其他非单词字符)。

图案细节

  • I- 匹配左分隔符
  • (?:\W+\w+){0,5}\‌​W+- 匹配1+ 个非单词字符 ( ) 和 1+个单词字符 ( ) 的0 到 5 个序列(由于限定量词{n,m}),最后的 a匹配 1 个或多个必须存在的非单词字符将最后匹配的单词字符与...分开\W+\w+\W+
  • (?:TV|chocolate|fir‌​e)- 匹配尾随分隔符
于 2016-08-17T08:27:23.280 回答
0

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

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

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

于 2016-08-17T08:23:36.283 回答
0

尝试

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

在这里测试

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

它还接受任何长度的任何有效“单词” (\w) 字符单词和任何有效间距字符(不考虑重复)。

于 2016-08-17T08:40:53.823 回答
0

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

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

于 2016-08-17T08:27:39.280 回答