正則表達(dá)式在許多編程語言中都具有重要得作用,學(xué)會(huì)立正則表達(dá)式對編程處理數(shù)據(jù)具有事半功倍的作用
正則表達(dá)式得模式修飾符
- 參數(shù) | 含義
---- | ---
i | 忽略大小寫
g | 全局匹配
m | 多行匹配
1.兩種創(chuàng)建方式
var box = new RegExp("box","i");
var box = /box/i;
2.RegExp對象的方法
- 方法 | 功能
---- | ---
exec | 一個(gè)在字符串中執(zhí)行查找匹配的RegExp方法,它返回一個(gè)數(shù)組(未匹配到則返回null)
test | 一個(gè)在字符串中測試是否匹配的RegExp方法,它返回true或false坑填。
match| 一個(gè)在字符串中執(zhí)行查找匹配的String方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回null函匕。
search| 一個(gè)在字符串中測試匹配的String方法蚪黑,它返回匹配到的位置索引中剩,或者在失敗時(shí)返回-1。
replace|一個(gè)在字符串中執(zhí)行查找匹配的String方法掠剑,并且使用替換字符串替換掉匹配到的子字符串郊愧。
split| 一個(gè)使用正則表達(dá)式或者一個(gè)固定字符串分隔一個(gè)字符串井佑,并將分隔后的子字符串存儲(chǔ)到數(shù)組中的String方法
使用 new 運(yùn)算符的 test 方法示例
var pattern = new RegExp('box', 'i');
var str = 'This is a Box!';
alert(pattern.test(str));
使用字面量方式的 test 方法示例
var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.test(str));
使用一條語句實(shí)現(xiàn)正則匹配
alert(/box/i.test('This is a Box!')); //模式和字符串替換掉了兩個(gè)變量
使用 exec 返回匹配數(shù)組
var pattern = /box/i;
var str = 'This is a Box!';
alert(pattern.exec(str)); //匹配了返回?cái)?shù)組,否則返回 null
使用 match 方法獲取獲取匹配數(shù)組
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.match(pattern));
alert(str.match(pattern).length); //查找到返回位置,否則返回-1
PS:因?yàn)?search 方法查找到即返回,也就是說無需 g 全局
使用 search 來查找匹配數(shù)據(jù)
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.search(pattern));
使用 replace 替換匹配到的數(shù)據(jù)
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.replace(pattern, 'Tom')); //將 Box 替換成了 Tom
使用 split 拆分成字符串?dāng)?shù)組
var pattern = / /ig;
var str = 'This is a Box!,That is a Box too';
alert(str.split(pattern)); //將空格拆開分組成數(shù)組
字符類
元字符/元符號 | 匹配情況
---- | ---
. | 匹配除換行符以外得任意字符
[a-z0-9] |匹配括號中的字符集中得任意字符
[^a-z0-9]| 匹配任意不在括號中的字符集中得字符
\d|匹配數(shù)字
\D|匹配非數(shù)字 === [^0-9]
\w|匹配字母數(shù)字以及下劃線_
\W|匹配非 字母數(shù)字以及以及下劃線_
\o|匹配null字符
\b|匹配空格字符
\f|匹配進(jìn)制字符
\n|匹配換行符
\r|匹配回車字符
\t|匹配制表符
\s|匹配空白字符.空格躬翁。制表符和換行符
\S| 匹配非 空白字符
^|行首匹配
$|行尾匹配
\A|只有匹配字符串開始處
\b|匹配單詞邊界盯拱,單詞在[]內(nèi)時(shí)無效
\B|匹配非單詞邊界
\G| 匹配當(dāng)前搜索得開始位置
\Z|匹配字符串結(jié)束處或行尾
this| where|匹配this或者where得任意一個(gè)記錄符 | 匹配情況
---- | ---
\1或者$1 |匹配第一個(gè)分組或者第一個(gè)分組內(nèi)得內(nèi)容
\1或$1| 匹配第一個(gè)分組中得內(nèi)容
? | 匹配0個(gè)或一個(gè)
- |匹配0個(gè)或任意多個(gè)
- |匹配至少一個(gè)
(xyz)+ |匹配至少一個(gè)(xyz)
x{m,n} | 匹配至少m個(gè)X狡逢,最多n個(gè)X
貪婪與惰性 即是在貪婪匹配符后面加?號
- 貪婪 | 惰性
---- | ---
- | +?
{n,m}| {n,m}?
使用點(diǎn)元字符
var pattern = /g..gle/;
var str = 'google';
alert(pattern.test(str));
重復(fù)匹配
var pattern = /g.*gle/;
var str = 'google';
alert(pattern.test(str));
使用字符類匹配
var pattern = /g[a-zA-Z_]*gle/;
var str = 'google';
alert(pattern.test(str));
使用錨元字符匹配
var pattern = /^google$/;
var str = 'google';
alert(pattern.test(str));
/^從開頭匹配,$從結(jié)尾開始匹配
var pattern = /goo\sgle/;
var str = 'goo gle';
alert(pattern.test(str)); //\s 可以匹配到空格
var pattern = /google\b/;
var str = 'google';
alert(pattern.test(str)); //\b 可以匹配是否到了邊界
使用或模式匹配
var pattern = /google|baidu|bing/;
var str = 'google';
alert(pattern.test(str));
使用分組模式匹配
var pattern = /(google){4,8}/;
var str = 'googlegoogle';
alert(pattern.test(str)); //匹配分組里的字符串 4-8 次
var pattern = /8(.*)8/; //獲取 8..8 之間的任意字符
var str = 'This is 8google8';
str.match(pattern);
alert(RegExp.$1); //獲取 8..8 之間的任意字符
貪婪
var pattern = /8(.*)8/;
var str = 'This is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>'); //得到替換的字符串輸出
document.write(result);
var pattern = /(.*)\s(.*)/;
var str = 'google baidu';
var result = str.replace(pattern, '$2 $1'); //將兩個(gè)分組的值替換輸出
document.write(result);
使用前瞻捕獲
var pattern = /(goo(?=gle))/; //goo 后面必須跟著 gle 才能捕獲
var str = 'google';
alert(pattern.exec(str));
使用分組嵌套
var pattern = /(A?(B?(C?)))/; //從外往內(nèi)獲取
var str = 'ABC';
alert(pattern.exec(str)); //abc,abc,bc,a
四.常用的正則
1.檢查郵政編碼
var pattern = /[1-9][0-9]{5}/; //共 6 位數(shù)字,第一位不能為 0
var str = '224000';
alert(pattern.test(str));
2.檢查文件壓縮包
var pattern = /[\w]+\.zip|rar|gz/; //\w 表示所有數(shù)字和字母加下劃線
var str = '123.zip'; //\.表示匹配.,后面是一個(gè)選擇
alert(pattern.test(str));
//\w 表示所有數(shù)字和字母加下劃線
//\.表示匹配.,后面是一個(gè)選擇
3.刪除多余空格
var pattern = /\s/g;
var str = '111 222 333';
var result = str.replace(pattern,''); //把空格匹配成無空格
alert(result);
4.刪除首尾空格
var pattern = /^\s+/; //強(qiáng)制首
var str = 'goo gle '
var result = str.replace(pattern, '');
pattern = /\s+$/; //強(qiáng)制尾
result = result.replace(pattern, '');
alert('|' + result + '|');