正則表達式的一些基礎

關於我熟悉又陌生的正則表達式~


一個正則表達式包含一個模式和三個標誌(i、g、m

1、RegExp實例方法
使用:pattern.test(str)
功能:目標字符串中是否包含了與模式匹配的內容
1.test()
返回值:true/false;
2.exec()
返回值:包含第一個匹配內容的數組,沒有匹配到返回null,爲捕獲組而設計。
具體見下面七-捕獲性分組

2、String實例方法(適用於正則的)
使用:str.match(pattern)
1.match()
功能:獲取匹配信息
返回值:未設置全局下,返回包含了匹配到第一個字符串的數組;設置全局下,返回包含全部匹配的信息的數組
2.replace()
功能:替換匹配信息
返回值:返回替換後的字符串。未設置全局下,匹配到的第一個信息被替換;設置全局下,全部匹配到的信息被替換
3.search()
功能:查找匹配信息
返回值:返回第一個匹配的位置,不管是否設置全局;沒有匹配到返回-1
4.split()
功能:將原字符串按匹配模式分割,也可用來刪除、替換
返回值:返回包含分割後信息的數組

3、RegExp構造函數屬性
使用:RegExp.input
1.input
2.leftContent
3.rightContent
4.lastMatch
5.lastParen
6.multiline

4、RegExp實例屬性
使用:regexp.global
1.global
2.ignoreCase
3.lastIndex
注意:(1)在非全局下,IE與其餘瀏覽器有差異,IE爲第二次匹配的位置
(2)非全局下,屢次匹配同一字符串均返回第一個匹配位置;全局下,則會繼續向下匹配
4.mutiline
5.source

5、元字符---控制模式匹配的方式
1.重複字符
(1).---匹配一個字符,除換行符\n外
(2)*---匹配任意個字符,除換行符外
(3)+---匹配至少一個字符
(4)?---匹配0或1個字符
(5){m,n}---匹配[m,n]個字符;n可不寫{m},或爲正無窮{m,}
上述重複字符能夠組合使用

2.其餘一些字符
[a-z]、[0-9]、[a-zA-Z0-9]
(1)^---非/[^a-z]/、從頭匹配/^[a-z]/
(2)$---結尾匹配/^[a-z]xx$/
(2)\w---字母、數字、_
(3)\W---非字母、非數字、非_
(4)\d---數字[0,9]
(5)\D---非數組[^0-9]
(6)\b---頭或結尾匹配/\bxxx{4}\b/
(7)\s---空格
(8)|---或
(9)()---分組

6、貪婪與惰性
1.貪婪:
先看整個字符串是否是一個匹配。
若是沒有發現匹配,它去掉最後字符串中的最後一個字符,並再次嘗試。
若是仍是沒有發現匹配,那麼再次去掉最後一個字符,這個過程會一直重複直到發現一個匹配或者字符串不剩任何字符。
2.惰性:
先看字符串中的第一個字母是否是一個匹配。
若是單獨着一個字符還不夠,就讀入下一個字符,組成兩個字符的字符串。
若是尚未發現匹配,從字符串中添加字符直到發現一個匹配或者整個字符串都檢查過也沒有匹配。
貪婪量詞   惰性量詞    支配量詞                      描述
-------------------------------------------------------------------------------------
  ?          ??          ?+                  能夠出現0次或1次,但至多出現1次
  *          *?          *+                  能夠出現任意次,也能夠不出現
  +          +?          ++                  出現1次或屢次,但至少出現1次
  {n}        {n}?        {n}+                必定出現n次
  {n,m}      {n,m}?      {n,m}+              至少出現n次,但至多不能超過m次
  {n,}       {n,}?       {n,}+               能夠出現任意次,但至少出現n次

7、捕獲性分組、非捕獲性分組與其餘
1.捕獲性分組:全部的分組都捕獲返回
var pattern = /(\d+)([a-z])/;
var str = '123abc';
var a = pattern.exec(str);
alert(a);
//123a,123,a
2.非捕獲性分組:在不須要捕獲返回的分組前加上?:
var pattern = /(\d+)(?:[a-z])/;
var str = '123abc';
var a = pattern.exec(str);
alert(a);
//123a,123
3.嵌套分組:從外向內獲取
var pattern = /(a?(b?(c?)))/;
var str = 'abc';
var a = pattern.exec(str);
alert(a);
//abc,abc,bc,c
4.前瞻性分組:goo後面必須跟gle才能返回,且返回的是goo
var pattern = /goo(?=gle)/;
var str = 'goobbb';
var a = pattern.exec(str);
alert(a);
//null

8、幾個經常使用的正則
1.檢查郵政編碼
//必須是6位數字,第一位不能爲0
var pattern = /^[1-9][0-9]{5}$/;
var str = 'This is 644501';
alert(pattern.test(str)); 
2.刪除多餘空格
var pattern = /\s/g;
var str = '111 222 333 555';
alert(str.replace(pattern, ''));
3.刪除首尾空格
方法一:
var pattern = /^\s+/;
var str = '          goo   gle            ';
var result = str.replace(pattern, '');
pattern = /\s+$/;
result = result.replace(pattern, '');
alert(result);
方法二:
var pattern = /^\s+(.+?)\s+$/;                                                        //(.+)是貪婪模式      (.+?)是惰性模式
var str =  '          goo   gle            ';
var result = pattern.exec(str)[1];
alert(result);
方法三:
var pattern = /^\s+(.+?)\s+$/;
var str =  '          goo   gle            ';
var result = str.replace(pattern,'$1');
alert(result);
4.電子郵件匹配
var pattern = /^\w+([\-\.]\w+)*@\w+([\-\.]\w+)*\.\w+([\-\.]\w+)*$/;
var str = '229541649@qq.com';
alert(pattern.test(str));
5.漢字
/^[\u4e00-\u9fa5]{0,}$/
6.最多隻有兩位小數的正實數
/^[0-9]+(\.[0-9]{2})?$/
7.非零的正整數
/^[1-9]\d*$/正則表達式

相關文章
相關標籤/搜索