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

时间:2016-08-17 08:19:09

标签: javascript regex node.js trailsjs

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

  • 我希望看电视
  • 我想要一些巧克力
  • 我需要消防

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

我想允许“I”和最后一个词女巫之间的任何单词(最多5个单词)。

4 个答案:

答案 0 :(得分:4)

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

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

请参阅regex demo

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

模式详情

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.2.Final</version> </dependency>

答案 3 :(得分:0)

尝试

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

Test here

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

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