天天看點

正規表達式随摘

普通文字和符号: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 來引用子模式