2017-02-22 56 views
0

試圖找出Javascript中的一些正則表達式,我想匹配一個單詞和行尾(或行尾的標點符號)之間的所有內容,但不能似乎讓它正常工作。這是我到目前爲止有:在行末匹配單詞和標點符號之間的所有內容

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

想回到X,是/是,和Y在所有情況如下:

  • X是/是Y!
  • X是Y?
  • X是/是Y.
  • X是/位於Y

如果就是這樣,我只想捕捉並非所有字符。!? 但在現實中的句子結構有時最終被:

User is [email protected]!!! 

這並不爲配合工作。在電子郵件中,所以我想出了這個:

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

但((*))捕獲包括標點符號在內的所有內容。因此,而不是返回:

['User', 'is', '[email protected]'] 

我得到

['User', 'is', '[email protected]!!!'] 

缺少什麼我在這裏?如何讓它忽略標點符號,但只有在字符串的末尾?

回答

1

讓你捕獲組懶惰,改成(.*?)

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

問題的產生是因爲在(.*)[\.\!\?]*,下半年總能爲空,上半年可以貪婪地佔用了一切。如果使用(.*?),則捕獲組會盡可能少地使用。

相關問題