Javascript 在行尾匹配单词和标点符号之间的所有内容
试图找出Javascript中的一些正则表达式,我想匹配单词和行尾(或行尾的标点符号)之间的所有内容,但似乎无法使其正常工作。这就是我到目前为止所做的:Javascript 在行尾匹配单词和标点符号之间的所有内容,javascript,regex,Javascript,Regex,试图找出Javascript中的一些正则表达式,我想匹配单词和行尾(或行尾的标点符号)之间的所有内容,但似乎无法使其正常工作。这就是我到目前为止所做的: /^([\w\d]+)\s(is|are)\s([^\n\r.!?]+)/i 要在以下所有情况下返回X、is/are和Y: X是/是Y X是/是Y吗 X是/是Y X是/是Y吗 如果真是这样的话,我会抓拍所有没有抓拍的角色。!? 但现实中的句子结构有时会是: User is test@example.com!!! 这不适用于和。在电子邮件
/^([\w\d]+)\s(is|are)\s([^\n\r.!?]+)/i
要在以下所有情况下返回X、is/are和Y:
- X是/是Y李>
- X是/是Y吗
- X是/是Y
- X是/是Y吗
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"]