JS系列之正則

建立方式

字面量建立方式正則表達式

var reg = /pattern/flags;

實例建立方式數組

var reg = new RegExp(pattern, flags);

字面量建立方式和構造函數建立方式的區別:
1.字面量建立方式不能進行字符串拼接,實例建立方式能夠函數

var regParam = 'cm';
var reg1 = new RegExp(regParam+'1');
var reg2 = /regParam/;
console.log(reg1);   // /cm1/
console.log(reg2);   // /regParam/

2.字面量建立方式特殊含義的字符不須要轉義,實例建立方式須要轉義code

var reg1 = new RegExp('\d');  //    /d/ 
var reg2 = new RegExp('\\d')  //   /\d/
var reg3 = /\d/;              //  /\d/

修飾符

i   ignoreCase 忽略大小寫
g   global 全局匹配
m   multiline 多行匹配

RegExp 對象屬性:對象

let reg = /abc/igm;
reg.global  //true
reg.ignoreCase  //true
reg.multiline  //true

元字符

位置元字符

^     匹配字符串的開始
$     匹配字符串的結束
\b    匹配單詞的開始或結束
\B    匹配非單詞邊界
\G    上一個匹配的結尾(本次匹配開始)
\A    字符串開頭(相似^,但不受處理多行選項的影響)
\Z    字符串結尾或行尾(不受處理多行選項的影響)
\z    字符串結尾(相似$,但不受處理多行選項的影響)

基本元字符

\     在非特殊字符以前的反斜槓表示下一個字符是特殊的
|     邏輯或操做符
[]    定義一個字符集合,匹配字符集合中的一個字符,在字符集合裏面像 .,\這些字符都表示其自己
[^]   對上面一個集合取非
-     定義一個區間,例如[A-Z],其首尾字符在 ASCII 字符集裏面
()    分組,將相關的元素歸攏,構成單個元素;多選結構,(...|...),規定可能出現的多個子表達式;引用分組,存儲子表達式匹配文本,供以後引用。

特殊元字符

.     匹配除了換行符以外的任何單個字符
\d    0~9任意一個數字
\D    非0~9之間的任意字符
\w    匹配包括下劃線的任何單詞字符
\W    匹配任何非單詞字符
\S    非空字符
\s    不可見字符,如空格、回車、製表符
a|b      a或者b任意一個

[abc]    a或b或c任意一個
[^abc]   除了a\b\c以外的

[a-z]    表示a到z中任意一個字母 [0-9]等價於\d
[^a-z]

量詞

*        重複零次或更屢次
+        重複一次或更屢次
?        重複零次或一次
{n}      重複n次
{n,}     重複n次或更屢次
{n,m}    重複n到m次

字符類

\t Tab
\n 換行符
\r 回車符
\f 換頁符
\e Escape

貪婪與非貪婪模式

貪婪匹配: 正則表達式通常趨向於最大長度匹配,也就是所謂的貪婪匹配
非貪婪匹配:就是匹配到結果就好,最少的匹配字符索引

默認是貪婪模式;在量詞後面直接加上一個問號?就是非貪婪模式。

反向引用

當一個正則表達式被分組以後,每個組將自動被賦予一個組號,該組號能夠表明該組的表達式。其中組號的編制規則爲:從左到右、以分組的左括號「(」爲標識,第一個分組的組號爲1,第二個分組的組號爲2,依此類推。字符串

「\number」中的number就是組號

regex=(abc)d\1能夠匹配字符串abcdabc,即\1表示把獲取到的第一組再匹配一次,以下:
let regg = /(abc)d\1/;
"abcabcdbc".match(regg);    //["abcdabc", "abc", index: 3, input: "abcabcdabc", groups: undefined]

預搜索(零寬斷言)

預搜索,又叫零寬斷言,又叫環視,它是對位置的匹配,與定位字符(邊界字符)相似。input

(?=pattern)  斷言此位置的後面能匹配表達式pattern
(?<=pattern) 斷言此位置的前面能匹配表達式pattern
(?!pattern)  斷言此位置的後面不能匹配表達式pattern
(?<!pattern) 斷言此位置的前面不能匹配表達式pattern

RegExp 對象屬性

lastIndex    一個整數,標示開始下一次匹配的字符位置。        
source    正則表達式的源文本。

RegExp 對象方法

test

test接受一個字符串參數,若是正則表達式與指定的字符串匹配返回 true 不然返回 falseconsole

let reg = /^Hello/

reg.test('Hello World') // => true
reg.test('Say Hello') // => false

exec

exec一樣接受一個字符串爲參數,返回一個數組,其中存放匹配的結果。若是未找到匹配,則返回值爲 null。ast

let reg = /([a-z])\d+/
let str = 'a233'
let result = reg.exec(str)   // ["a233", "a", index: 0, input: "a233"] 

// 0:"a233" 表示咱們捕獲到的字符串
// 1:"a" 表示咱們捕獲到的分組字符串
// index:0 表示捕獲開始位置的索引
// input 表示原有的字符串
相關文章
相關標籤/搜索