2011-12-26 120 views
2

我有以下幾種可能:正則表達式貪婪捕獲?

  1. ' !This is a string! '
  2. '!This is a string !'
  3. '! This is a string !'
  4. ' ! This is a string! '
  5. ' ! This is a string '

在所有這些情況下我想匹配

'This is a string'

繼承人什麼我試過到目前爲止:

/\s*!(.*)!{0,1} 
/\s*!(.*?)!{0,1} 

但它要麼吃掉的!或完全不匹配。請注意,最後的!是可選的。

Here's a fiddle to see what I mean

+0

我很肯定下面的幾個答案是正確的。 :) – bozdoz 2011-12-26 23:23:37

回答

4

或者,也許這一個

/^\s*!\s*(.*?)\s*!?\s*$/ 
+1

+1好答案。但效率可以稍微提高:'/^\ s *!\ s *(。*?)\ s *(?:!\ s *)?$ /' – ridgerunner 2011-12-26 01:55:35

+0

對不起,我沒有複製你的答案,它在響應refp的評論後編輯它時剛剛結束 - 我猜應該對照其他現有答案進行雙重檢查。沒有爭議,你先發布它。 +1 – nnnnnn 2011-12-26 09:45:38

0

我將是正確的,如果我假設字符串不能包含!在這種情況下,你可以做這樣的事情:

/\s*![^!]*!{0,1}/ 
+0

一個字符串可以包含'!'s – qwertymk 2011-12-26 01:26:58

1

這是否正則表達式工作爲您的問題?

^[\s!]*(\w*)[\s!]*$ 
+0

這是否工作?我試過了,它返回null。爲什麼這是upvoted? http://jsfiddle.net/UAefq/6/ – bozdoz 2011-12-26 23:24:45

0

好吧,這個會保持!結尾:

/(?:^[^a-z0-9]*)(.*?)(?:\s*)$/i 

那就是:http://jsfiddle.net/UAefq/4/

也可以更新它失去了!並在字符串的結束和空間,應該是這樣的:

/(?:^[^a-z0-9]*)(.*?)(?:[\!\s]*)$/i 

你可以在這裏檢查結果:http://jsfiddle.net/UAefq/5/

所以我希望這完全回答你的問題。