Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在行尾匹配单词和标点符号之间的所有内容_Javascript_Regex - Fatal编程技术网

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!!! 这不适用于和。在电子邮件

试图找出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(.*)[\.\!\?]*$/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"]