普通文字和符号:A-Z a-z 0-9 以及不是元字元的其它符号
輸入Unicode字元時,同String一樣,使用\uXXXX
元字元:三三二三個一(記憶口訣)
三個括号: {[(
三個比對次數: *+? 星加問
兩個斷言: ^$ 定頭定尾
三個一: | 選擇符 . 模糊比對 \ 轉義
三個括号:
{定義比對次數
[字元集
(子模式
三個比對次數:
* 比對出現0次或多次
+ 比對出現至少1次或多次
? 比對出現0次最多1次
兩個斷言:
^ 在/後出現時為左端斷言, /^
$ 在/前出現時為右端斷言, $/
三個獨立元字元:
| 選擇符,比對時相容比對選擇符兩邊的字元
. 模糊比對,可以代替
不可見字元:比較一些轉義的控制字元
14.3.2 正規表達式中的字元集
1.字元集的概念和最簡單的字元集形式
[字元集]
字元集用中括号括起來
Unicode字元請使用\uXXXX 四位十六進制Unicode代碼輸入
如:/g[eo]t,分别比對get和got,但不會比對geot,因為字元集隻能比對一個字元
2.連字元在字元集中的運用
[字元-字元]
如:[a-z][A-Z],就是比對英文字母字元集了
3.取反符号在字元集中的運用
[^字元集]
添加取反符号後,比對時将忽略字元集中的所有元素
4.字元集中需要轉義的特殊字元
\轉義符号
常見要轉義的字元有三類:
1.字元串: 雙引号” 單引号 ‘ 反斜杠 \
2.正規表達式的源字元
3.字元集中的: [\^-
盡可能将會産生歧義的字元轉義
14.3.3 特殊的點号(.)
.号可以替代任意單個字元,作為正規表達式中的模糊比對字元
1.點号不比對新行符(\n)
多行字元的模糊比對中,.号不能比對\n換行符,要比對換行符,必須在标志位中使用s
2.盡量少使用點号“.”
隻在明确不會模糊比對時出錯的情況下才用.模糊比對,點号比對所有的Unicode字元。
14.3.4 選擇符
| 對選擇符兩邊的元素作任意比對。
使用|選擇符時,盡可能使用括号将兩邊的操作數括起來,以友善差別。
14.3.5 括号與分組
() 圓括号将表達式的一部分括起來,就會将這部分定交成組,一旦命名了組,就可以通過“向後引用”來調用它。
它所括起的部分一般用于:
1.和選擇符搭配,規定作用于選擇符的範圍,如/he(got|get)it/
2.和限定符搭配使用,指定比對的重複次數,如/(get)*/
14.3.6 用正規表達式描述字元串的重複
使用{}定義比對的重複次數,跟在要重複的表達式或字元後面
{最小出現次數[,最多出現次數]}
還有常用的三個 非顯式限定符
*+? 星加問
* 出現0次或多次 等同 {0,}
+ 出現1次或多次 等同 {1,}
? 出現0次或最多1次 等同 {0,1}
14.3.7 注意正規表達式的貪婪性和懶惰性
使用*+?{}的時候,正規表達式總是盡可能向右搜尋盡可能多的比對結果,如果想禁止此貪婪性,可在操作符後加上 ?,迫使程式運作時使用懶惰模式,優先使用左邊比對的第一個結果。
14.3.8 用正規表達式來定位
斷言:指定比對發生的位置
^ 比對字元串起始的位置,一般跟在起始/後,組合成 /^
$ 比對字元串結尾的位置,一般跟在結束/前,組合成$/
\b 比對字元邊界
\B 比對非字元邊界
字元邊界指空格的位置,可跟在要比對的表達式左邊或右邊
14.3.9 正規表達式的5個标志位。
g global 全局比對,盡可能比對全部結果
i ignoreCase 不區分大小寫比對
m multiline 斷言控制符,使用後 ^$兩個斷言符才能生效
s dotall 比對換行符标志
x extended 令正規表達式支援空格,但編譯時會自動忽略,增加可視的友好度
14.3.10 正規表達式元字元優先線
優先級順序從高到低排列
\ 轉義符
(),(?:),(?=),[] 分級定義符号,字元集定義符号
*,+,?,{n},{n,},{n,m} 限定符
^,$,\位置定義 位置和順序
| 選擇符
14.4 正規表達式與字元串的結合使用詳解
14.4.1 RegExp的exec()和test()
test方法
var RegExp對象:RegExp = /正規表達式/ 或 new RegExp(正則式,标志位)
var String對象:String = 字元;
RegExp對象.test(String對象)
RegExp對象.exec(正規表達式):Array
exec傳回一個比對後的數組
14.4.3 String類的replace()與正規表達式向後引用
()使用子表達式括起的表達式,可以在後邊引用 ,使用\n n為索引 從1至99
/\b([a-z]+) \1\b/gi 其中的\1就是引用前面第一個([a-z])
可在處理函數中用 $n 來引用子模式