我學習JavaScript中的正則表達式,而(?:x)
字符或「非捕獲括號」只是沒有道理給我。如果你不想讓比賽被記住,爲什麼不完全放棄括號?使用/(?:x)/
而不僅僅是/x/
有什麼好處?
1
A
回答
11
因爲您可能需要其他原因的括號。例如,假設您想要捕獲abababababab9
末尾的數字。如果你寫了ab*(\d)
那麼它會匹配abbbbbbbbb9
。您需要將括號加上ab
,以便操作員重複整個操作。 (ab)*(\d)
。但是也許你不在意ab
重複了多少次。這就是你使用(?:)
:(?:ab)*(\d)
的地方。
+1
甜美簡單,謝謝! – 2012-07-10 14:27:38
3
您需要它來定義子模式以用於替代匹配或量詞,這將適用於整個子模式而不會浪費捕獲槽。例如,您可以使用(?:)
和|
在正則表達式的中間提供備用匹配而不捕獲它。
3
考慮以下情況:
(?:aa|bb|cc)
(?:abc)?
可以使用非捕獲組來匹配具有更復雜的子模式模式。在某些情況下,使用非捕獲組語法也會導致更高效的正則表達式。
1
如果你不希望匹配被記住,爲什麼不完全放棄括號?使用/(?:x)/而不是/ x /的優點是什麼?
它使用時要組字符,但你不想記住他們。如果刪除括號,則不能對字符序列進行分組。所以,舉例來說:
/foo|bar/.test("foo") // true
/foo|bar/.test("bar") // true
如果你想達到匹配foor
一個模式,fbar
你必須組中的中間人物:
/f(?:oo|ba)r/.test("fbar") // true
/f(?:oo|ba)r/.test("foor") // true
當然,也可以組和記憶中組,但是如果使用test
您使用match
或其他返回數組對您很重要的方法,那麼您必須改用(?:
。
相關問題
- 1. 兼容X-UA的要點是什麼?
- 2. fetchAll的要點是什麼?
- 3. 什麼是{$ x}?
- 4. strtotime製作字符串需要什麼/默認值是什麼?
- 5. 字符後面的字符是什麼?
- 6. Rails 1.X和2.X之間的主要區別是什麼
- 7. com.apple.PeoplePicker.plist的符號鏈接的要點是什麼?
- 8. 爲什麼在我的字符串中有`=`而不是`\ x`?
- 9. 領先的`\ x`在Python字符串中是什麼意思`\ xaa`
- 10. 獲得前x個字符的最簡單方法是什麼?
- 11. 什麼是var x = x || {};
- 12. 是什麼X ++和++ X
- 13. 什麼是使用模板的要點?
- 14. Web服務的要點是什麼?
- 15. 嚴格聲明的要點是什麼?
- 16. IClassFactory :: LockServer的要點是什麼?
- 17. 編輯會議的要點是什麼?
- 18. 存儲過程的要點是什麼?
- 19. 休眠的要點是什麼?
- 20. ULARGE_INTEGER聯盟的要點是什麼?
- 21. WPF中StatusBarItem類的要點是什麼?
- 22. Java中finally塊的要點是什麼?
- 23. 使用(Request $ request)的要點是什麼?
- 24. (NSError **)錯誤的要點是什麼?
- 25. 什麼是檢查點節點HDFS?爲什麼要使用它?
- 26. 符合XHTML標準的要點是什麼?
- 27. OpenMPI v1.X vs v2.X - 主要區別是什麼?
- 28. 脫字符(^)字符是什麼意思?
- 29. 字符'0x8'這是什麼字符?
- 30. X對CSS來說是什麼GWT對Javascript來說是什麼;什麼是X?
我相信我在研究中看到了一個,但這個例子看起來很複雜。由於我在學習,我需要簡單的答案。 :) – 2012-07-10 14:26:10