Javascript emotes的正则表达式匹配

Javascript emotes的正则表达式匹配,javascript,regex,Javascript,Regex,我在我的网站上实现了emotes,但是这个正则表达式有问题。我90%在那里,但有一个案例我不知道如何解决 这是我的正则表达式:(选项是gm) 在循环中替换Kappa,以检查不同的表情。这是我的测试用例。第二个和第三个未被检测到。每条生产线中的第二个卡帕未被捕获 Kappa Kappa Kappa Kappa Kappa Kappa KappaHD Kappa FrankerZ Kappa Someone Said: Kappa :  Kappa Kappa K

我在我的网站上实现了emotes,但是这个正则表达式有问题。我90%在那里,但有一个案例我不知道如何解决

这是我的正则表达式:(选项是
gm

在循环中替换
Kappa
,以检查不同的表情。这是我的测试用例。第二个和第三个未被检测到。每条生产线中的第二个卡帕未被捕获

Kappa
Kappa Kappa
Kappa Kappa Kappa
KappaHD Kappa FrankerZ Kappa
Someone Said: Kappa
:  Kappa
Kappa KappaHD Kappa
KappaKappa 
如果您不熟悉,请遵循以下规则:

  • 查找
    Kappa
    g
    设置)的所有实例
  • 可以位于字符串/字符串行的开头或结尾(
    m
    setting)
  • 必须是自己的,而不是在单词的中间。 问题似乎是第一个
    Kappa
    通过它后面的空间进行匹配,因此没有找到第二个

    下面是一个带有示例代码的Regex101:

    我如何让它在
    Kappa-Kappa
    中正确检测
    Kappa
    的两个实例

    我考虑在
    \sKappa\s
    上运行第二次查找,但这似乎不是最好的解决方案

    (?:^|\s+| )Kappa(?=$|\s+)
    
    试试这个。看演示

    您需要的是
    lookahead
    或者当您在第一个
    Kappa
    之后消耗
    空间时,第二个
    Kappa
    无法匹配,因为
    后面没有空间
    。因此使用
    0宽度断言
    一个更简单的解决方案:

    \bKappa\b
    


    单词边界“\b”将匹配所有非单词字符,而不会消耗这些字符。

    看起来这将非常有效!谢谢,我不太熟悉你lookaheads@DLeh
    lookahead
    是一个
    0宽度断言
    。因此它不消耗任何东西,只检查我们这里需要的东西。如果它对您有效,请接受。这似乎影响了我的替换功能,但我将更新我的问题以提供详细信息。我找到了答案。我的替换字符串是
    $1replacement$2
    ,它返回的是准确的字符串。我将其更改为删除第一组中的
    ?:
    ,这使我能够正确捕获
    $1
    ,然后我刚刚从替换中删除了
    $2
    。感谢@vks@DLeh它将匹配
    !@;卡帕@#可以接受吗?可能还有其他一些边缘情况,这可能没有帮助,但我主要是采用“全词”方法,这似乎很好。我试图用原始正则表达式解决的最大问题是
    Kappa
    KappaHD
    应该有不同的替换结果。这也使得我的替换变得更容易,因为我只需要替换为我想要的文本,如果您确信您的输入不会有类似于
    Kappa的内容,则不需要
    $1
    @DLeh!高清
    那就好了:)
    \bKappa\b