正则表达式负向查找不能按预期工作,我该如何让它工作

问题描述 投票:0回答:1

除了了解为什么这个特定的正则表达式不能按预期工作之外,我并不想完成任何事情:

/\bty(?!t)\b/i

预期比赛:

  • 任何以 'ty' 开头且不以 't' 结尾的字符串

根据我对负向后查找的理解,它应该匹配后面不跟有某些内容的内容,这里我想匹配 tyX (X 可以是任何字符),只要 X 不是“t”。

应匹配:

tya

不应匹配:

tyt

使用否定集可以轻松解决这个问题,但我不明白为什么否定前瞻不起作用。

javascript regex regex-lookarounds
1个回答
0
投票

根据我对负向后查找的理解,它应该匹配后面不跟有某些内容的内容,这里我想匹配 tyX (X 可以是任何字符),只要 X 不是“t”。

  • (?!t)
    不是负面的看背后,而是负面的看前方。您在问题中进一步说得对。
  • (?!t)
    断言该位置没有
    t
    ,而不移动当前位置。
  • \bty(?!t)\b
    无法匹配
    tyX
    ,因为您的正则表达式需要在
    \b
    之后有 ty
    立即
    。此模式中没有提供第三个字符。
  • 结尾
    \b
    断言下一个字符不是字母数字,它已经排除了“t”,因此您的正则表达式实际上与
    \bty\b
    执行相同的操作,因此只有单词
    ty
    可以匹配(不区分大小写) ).

要提供更长的单词,您应该在

\w*
之后添加
ty
。要排除以“t”结尾的单词,您可以使用否定外观behind,以便断言匹配的最后一个字符不是“t”:

\bty\w*(?<!t)\b

这将匹配以下所有内容:

ty
typ
type
typical
tyranny
typesetting

它不会匹配:

typeset
tyrant
typist
typescript
typologist
© www.soinside.com 2019 - 2024. All rights reserved.