先來一段介紹:javascript
正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。java
簡單說就是:正則表達式
它是對字符串執行模式匹配的強大工具。segmentfault
Javascript中的正則表達式相較於其餘語言來講實現的並不完整,但仍然是十分強大的,可以幫助咱們完成絕大多數模式匹配任務。下面將一步一步詳細介紹。編輯器
在Javascript中,定義一個正則表達式有兩種方式,一種是直接量,另外一種是使用構造函數。函數
Javascript可使用相似Perl的語法定義一個正則表達式工具
var r = /pattern/flags;
其中pattern
是任何簡單或複雜的正則表達式,flags是用以表達正則表達式行爲的一個或者多個標識。code
來看幾個例子regexp
var r1 = /at/g; // 匹配字符串中全部'at'的實例 var r2 = /.ho/gi; // 匹配以'ho'結尾的三個字符的組合,不區分大小寫
Javascript中正則表達式的構造函數爲RegExp,即Regular Expression
的縮寫,它接收兩個參數,第一個爲要匹配的字符串模式,另外一個是可選的標識位。blog
如:
var r = new RegExp('hello', 'g'); // 匹配字符串中全部的'hello'實例
有一點必定要注意,第一個參數是一個字符串,而不是正則表達式的直接量。
在正則表達式的模式中,有一些字符是有特殊含義的,被稱爲元字符
,若是要匹配元字符,則必須對其進行轉義。
這些元字符分別是:
( [ { \ ^ $ | ) ? * + . ] }
例如:
// 若是要匹配'/user/name'這個字符串,正則表達式須要這樣 var r1 = /\/user\/name/; var r2 = /\.ho/; // 匹配'.ho'這個字符串
若是使用構造函數定義正則表達式,因爲構造函數的第一個參數必須是一個字符串,在匹配元字符時,這將會致使雙重轉義。
例如:
var r1 = new RegExp('\/user', 'g'); // wrong // 因爲\在字符串中須要轉義爲\\,因此,若是要匹配/user,正則表達式須要寫爲 var r1 = new RegExp('\\/user', 'g');
全部元字符都須要進行雙重轉義
另外,還有一些預約義的特殊字符也被稱爲元字符
元字符 | 描述 |
---|---|
. | 查找單個字符,除了換行和行結束符。 |
\w | 查找單詞字符。 |
\W | 查找非單詞字符。 |
\d | 查找數字。 |
\D | 查找非數字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配單詞邊界。 |
\B | 匹配非單詞邊界。 |
\0 | 查找 NUL 字符。 |
\n | 查找換行符。 |
\f | 查找換頁符。 |
\r | 查找回車符。 |
\t | 查找製表符。 |
\v | 查找垂直製表符。 |
\xxx | 查找以八進制數 xxx 規定的字符。 |
\xdd | 查找以十六進制數 dd 規定的字符。 |
\uxxxx | 查找以十六進制數 xxxx 規定的 Unicode 字符。 |
有一點須要特別注意:無論一個元字符表明多少種含義,單個元字符始終只匹配單個字符
元字符其實沒必要刻意花時間去記憶,等了解了所有的正則表達式使用方法以後,天然就知道哪些字符是有特殊含義的,也就知道了哪些時候須要轉義了。
下面將陸續介紹正則表達式的使用方法。