js正規表示式速查

QLQ發表於2019-02-20

正規表示式

如果你想記住js正規表示式,來收藏一下說不定會多看幾遍呢,感謝您的支援呀

字面量語法

字元 匹配
字母或數字 自身
\0 表示空字元,null,等價\u0000
\t 表示製表符 \u0009
\n 表示換行符 \u000A
\v 表示垂直製表符
\f 表示換頁符
\r 表示回車符
\xnn 有十六進位制數表示escape字元數
\uxxxx 十六進位制的Unicode
\xxx 八進位制字元

以上正規表示式為基本的字面量語法,漢字的範圍:/^[\u4e00 - \u9fa5]+$/

修飾符

字元 匹配
g 全域性匹配
i 忽略大小寫
m 多行匹配

閱讀以上內容我們正式來看看正規表示式還有哪些語法


範圍類

範圍類是表示可以匹配一定範圍內的字元比如**[a-z]、[0-9]**

"2016-09-01".replace(/[0-9]/g,"A") //AAAA-AA-AA
複製程式碼

預定義類

正規表示式為了方便也提供了一些預定義類:

字元 等價類 匹配
. [^\r\n] 除了回車換行
\d [0-9] 數字字元
\D [^0-9] 非數字字元
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z0-9_] 字母數字下劃線
\W [^a-zA-Z0-9_] 非字母數字下劃線

預定義類提供了比較常用的類

邊界

字元 匹配
^ 以XXX開頭
$ 以XXX結尾
\b 單詞邊界
\B 非單詞邊界

對於單詞邊界的解釋: 1.當我們要將字串'this is a apple'中is替換為字母A應該怎麼做呢?

//1.首先我們來嘗試一下
'this is a apple'.replace(/is/g,'A'); //輸出"thA A a apple"
//2.只有單詞旁邊有空格才會被替換??於是
'this is a apple'.replace(/\sis\s/g,'A'); //輸出"thisAa apple"
//3.來試試單詞邊界
'this is a apple'.replace(/\bis\b/g,'A'); //輸出"this A a apple"
//4如果我們想改變this中的is呢?
'this is a apple'.replace(/\Bis\b/g,'A');//輸出"thA is a apple"
複製程式碼

量詞

字元 匹配
最多一次
+ 至少一次
* 任意次
{n} n次
{n,m} n到m次
{n,} 至少n次

貪婪模式與非貪婪模式

正規表示式預設是按照儘可能多的匹配:

'12345678'.replace(/\d{3,6}/g,'A');//A78
//若改為非貪婪模式只需要將量詞後加上?
'12345678'.replace(/\d{3,6}?/g,'A')//AA78
複製程式碼

分組

當你要匹配一個單詞匹配三次怎麼用呢?

'hellohellohellohello'.replace(/(hello){2}/g,'A')//Ahello
複製程式碼

'hello'.replace(/hello|world/g,'A')
hello或者world而不是o或w
'helloorldhellworld'.replace(/hell(o|w)orld/g,'A')//AA
複製程式碼

反向引用

假定一個需求:YYYY-MM-DD替換為DD-MM-YYYY

'2010-09-08'.replace(/(\d{4})-(\d{2})-(\d{2})/,'$3/$2/$1');
$n表示的是第幾個分組
複製程式碼

忽略引用

在分組裡面加上?:

'2010-09-08'.replace(/(?:\d{4})-(\d{2})-(\d{2})/,'$3/$2/$1');
//"$3/08/09"
$3不存才了
複製程式碼

前瞻與後顧

先來看看這張表

名稱 正則 匹配
正向前瞻 exp(?=assert)
負向前瞻 exp(?=assert)
正向後顧 exp(?=assert) js不支援
負向向後顧 exp(?=assert) js不支援

由於js不支援所以不予介紹了 前瞻:js從文字頭向尾部解析,文字尾部叫做"前" 來看之前的一個列子 'this is a apple'將is替換為A

'this is a apple'.replace(/is(?=\sa)/g,'A'); 
//輸出"this A a apple"
複製程式碼

正規表示式屬性與方法

  • 屬性
  1. globle:全域性匹配
  2. ignoreCase:忽略大小寫
  3. mutiline:多行匹配
  4. lastIndex:當前匹配字元最後一個字元的下一個的位置
  5. soure:正規表示式文字字串
  • 方法
  1. test他會從lastIndex開始匹配
  2. exec

相關文章