首页 > 解决方案 > 如何捕获字符串中的前 N ​​个单词?使用正则表达式?

问题描述

我有一个看起来像这样的正则表达式(所有单词字符加上下划线和破折号):

/[\w\-_]+/gm

和一个看起来像这样的输入:

This is a cat. It is fat. That is a dog. It looks like a log. Fat-cat dog_log

它正确匹配所有单词,跳过空格和标点符号。但我只想得到前三个字。我以为我可以添加{1,3}到正则表达式的末尾并得到这个结果,但这会产生错误。我使用的正则表达式测试器可以在这里找到:https ://regex101.com/r/Ec1IAH/1

标签: regex

解决方案


试试这个正则表达式:

^(?:[\w-]+[^\w-]+){2}[\w-]+

点击演示

解释:

  • ^- 匹配行首
  • (?:[\w-]+[^\w-]+){2}
    • [\w-]+- 匹配 1+ 个单词字符或-
    • [^\w-]*- 匹配出现 1 次以上的非单词字符或非-ie 的所有字符,匹配除字母、数字、下划线和-
    • {2}- 重复以上 2 步 2 次
  • [\w-]+- 匹配 1+ 个单词字符或-

推荐阅读