gpt4 book ai didi

javascript - 匹配行尾单词和标点符号之间的所有内容

转载 作者:行者123 更新时间:2023-12-03 04:57:19 27 4
gpt4 key购买 nike

试图找出Javascript中的一些正则表达式,我想匹配单词和行尾(或行尾标点符号)之间的所有内容,但似乎无法让它正常工作。这是我到目前为止所拥有的:

/^([\w\d]+)\s(is|are)\s([^\n\r.!?]+)/i

想要在以下所有情况下返回 X、is/are 和 Y:

  • X 是 Y!
  • X 是 Y?
  • X 是 Y。
  • X 是 Y

如果是这样的话,我会捕获所有不是的 Angular 色。!?但现实中的句子结构有时会是:

User is test@example.com!!!

这不适用于 .在电子邮件中,所以我想出了这个:

/^([\w\d]+)\s(is|are)\s(.*)[\.\!\?]*$/i

但是 (.*) 捕获了所有内容,包括末尾的标点符号。因此,不要返回:

['User', 'is', 'test@example.com'] 

我明白

['User', 'is', 'text@example.com!!!']

我在这里缺少什么?如何让它忽略标点符号,但仅当它们位于字符串末尾时?

最佳答案

将捕获组更改为 (.*?),使其变得懒惰:

> 'User is test@example.com!!!'.match(/^([\w\d]+)\s(is|are)\s(.*)[\.\!\?]*$/i).slice(1)
["User", "is", "test@example.com!!!"]
> 'User is test@example.com!!!'.match(/^([\w\d]+)\s(is|are)\s(.*?)[\.\!\?]*$/i).slice(1)
["User", "is", "test@example.com"]

出现这个问题是因为在 (.*)[\.\!\?]* 中,后半部分总是为空,而前半部分可能会贪婪地消耗所有内容。如果您使用(.*?),捕获组消耗尽可能少的资源。

关于javascript - 匹配行尾单词和标点符号之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com