一、字元類
概念: 將單獨的直接量字元放進方括弧內就可以組合成字元類(character class)。
註:紅色表示不是特別清楚的
[...] ——表示字元類中任意一個字元都滿足
[^...]——除字元類中的任意一個字元都滿足
.——除分行符號(\n)和Unicode終止符之外的任一字元(不知道有什麼用?)
\w——(word)任何ASCII單字字元,==[a-zA-Z0-9]
\W——任何非ASCII單字字元,==[^a-zA-Z0-9]
\s ——(space)任何Unicode空白字元
\S——任何非Unicode空白字元
\d——任何ASCII數字,等價於[0-9]
\D——除了ASCII數字,==[^0-9]
[\b]——退格直接量(不知道有什麼用?)
二、重複
重複還有:{n,m},{n,},{n},?,+,*不一一解釋
註:重複是匹配前一模式的一個或多個副本
三、非貪婪的重複(看是明白一點,做了實驗後不明白了!)
var s = "aaaaabab";
var tanlan = /a*b/;
var landu = /a*?b/;
var t = s.match(tanlan); //本以為t:aaaaabab,l:aaaaab
var l = s.match(landu); //這兩個匹配出來的數組居然是一樣的
四、選擇、分組和引用
|:選擇
匹配符號從左至右的運算式(匹配一個後不會再往後走了)
var regChoose = /\d{2}|\w{4}/; //要麼兩位小數,要麼四個小寫字母,匹配第一個就不匹配第二個
():組合
作用一:將單獨的公事包成子運算式
var regCombination = /(菜鳥吃蟲)+蟲吃菜/ //“菜鳥吃蟲”一定要出現一次或更多次
作用二:取出字串,以後匹配
匹配左右的冒號相同
var regMarks = new RegExp("([\'\"])[^\' \"]*\\1"); //匹配左右冒號一致,但有個問題:"中文的引號如何 表示,用ASCII碼嗎"
(?:...):組合,將公事包到一個單元,但不記憶與該組匹配的字元
不進行詳解
\n:與第n個分組第一次匹配的字元進行匹配
不進行詳解
五、指定匹配的位置
待續...