代码之家  ›  专栏  ›  技术社区  ›  Vishal

如何检查regex中是否至少有一个周围空间?

  •  0
  • Vishal  · 技术社区  · 4 年前

    我有这样一个信息:

    Upgrade is the first word in this paragraph.
    In this paragraph, upgrade is the last word.
    And this paragraph ends with upgrade.
    But I don't want to find that word in this command `gigalixir:upgrade`.
    

    在这个例子中,您可以看到升级word有4个实例。但我只想要3个例子。实际上,我只需要拆分字符串,如果单词upgrade两边都有空格,或者以空格开头或以空格结尾。我不想分裂,如果这个词没有任何周围的空格。

    因此,根据上述描述,只有前3行的升级词才应被视为断点。

    console.log(message.split(/\s?upgrade\s?/g));
    

    一些正则表达式专家能告诉我如何检查上面的正则表达式中是否至少有一个周围的空间?

    3 回复  |  直到 4 年前
        1
  •  2
  •   JAT86    4 年前

    这可能有用:

    (?:^| )[Uu]pgrade(?: ?)

    (?:^| ) 寻找任何一个开始( ^ | )前导空间 . 周围的括号 () . ?: 是可选的,仅用于忽略捕获括括号内的匹配项。 [Uu] 匹配单个小写或大写的“u”。

    (?: ?) 查找尾随空格。 ? 表示匹配零或一个空格。

        2
  •  2
  •   JGFMK    4 年前

    https://regex101.com/r/PROpvQ/1

    (?<=\s|^)[uU]pgrade\b
    

    积极寻找后面的空格或字符串开头。。以大写或小写升级,结尾有一个单词边界。(捕获空格、文本的句号结尾等)。

        3
  •  0
  •   Hal Morris    4 年前

    console.log(message.split(/(\s*)upgrade(\s*)/g));
    if (length($1) > 0 and length($2) > 0) { GOOD }
    else { BAD } # No space chars on either side of 'upgrade'
    

    \s匹配空格和制表符,所以如果只关心空格而不关心制表符,请使用(\*)