【问题标题】:Match pattern in each word inside a sentece句子中每个单词的匹配模式
【发布时间】:2015-11-19 21:45:57
【问题描述】:

我有以下模式:/*.a*.b*.c/,它将匹配任何包含abc 的输入。

所以以下字符串将匹配我的模式:

  • 555 a fgb ccc
  • a b c
  • atbtc

我想要实现的是只匹配整个单词而不是整个句子。所以下面的字符串会匹配:

  • i want abc 但以下内容不匹配:
  • a b c

我通过执行 str.split(" ") 解决了这个问题,并分别在每个单词上运行我的模式,但我确信有一种方法可以通过单个正则表达式匹配来实现它。

谢谢。

【问题讨论】:

  • 您确定*.a*.b*.c 是您的模式吗?它会引发异常,因为您无法量化字符串开始。我想你有/.*a.*b.*c/。试试^.*a\w*b\w*c.*$。或者您想要包含abc 的任何单词的任何顺序?
  • 嗯,.*不是互换了吗!?
  • /abc\b/i ?您将需要一个单词边界。
  • 我认为你需要一个更好的例子。 “我正在服用抗生​​素”怎么样?
  • @AlanMoore 我正在服用的抗生素应该匹配。因为它有一个单词按顺序包含a``b``c

标签: javascript regex


【解决方案1】:

只需将您的正则表达式中的. 替换为[^\s](除空格以外的任何字符)即可。

/[^\s]*a[^\s]*b[^\s]*c/

RegEx Demo

【讨论】:

  • 谢谢,这就是我要找的。​​span>
【解决方案2】:

/[ ]+(abc)[ ]+/g 应该可以解决您的问题

【讨论】:

  • 这将只匹配包含子字符串“abc”的单词,这不是所要求的。这不会匹配句子开头或结尾的单词(前后没有空格)。
  • 更像/ *([a-z]*a[a-z]*b[a-z]*c[a-z]*) */g
【解决方案3】:

试试这个正则表达式/([^ ]*a[^ ]*)( )*([^ ]*b[^ ]*)( )*([^ ]*c[^ ]*)( )*/

那么如果你想捕获包含a、b和c的单词。您需要使用match

使用此正则表达式,单词将根据匹配的括号位于位置 1、3 和 5。

要了解更多详细信息并构建您的正则表达式,您可以使用https://regex101.com/

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多