尝试在Javascript中找出一些正则表达式,我希望匹配单词和行尾(或行尾的标点符号)之间的所有内容,但似乎无法使其正常工作。这就是我到目前为止所做的:
/^([\w\d]+)\s(is|are)\s([^\n\r.!?]+)/i
想要在以下所有情况下返回X,是/和Y:
如果就是这样,我会抓住所有不属于的人物。!? 但现实中的句子结构有时会最终成为:
User is test@example.com!!!
哪个不适用于。在电子邮件中,我想出了这个:
/^([\w\d]+)\s(is|are)\s(.*)[\.\!\?]*$/i
但是(。*)捕获包括末尾标点符号在内的所有内容。所以不要回来:
['User', 'is', 'test@example.com']
我得到了
['User', 'is', 'text@example.com!!!']
我在这里缺少什么?我如何让它忽略标点符号,但只有它们在字符串末尾?
答案 0 :(得分:1)
将您的捕获组更改为(.*?)
:
> '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"]
问题出现了,因为在(.*)[\.\!\?]*
中,下半场总是空的,上半场可以贪婪地消耗所有东西。如果您使用(.*?)
,则捕获组消耗尽可能少。