正規表示式
如果你想記住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"
複製程式碼
正規表示式屬性與方法
- 屬性
- globle:全域性匹配
- ignoreCase:忽略大小寫
- mutiline:多行匹配
- lastIndex:當前匹配字元最後一個字元的下一個的位置
- soure:正規表示式文字字串
- 方法
- test他會從lastIndex開始匹配
- exec