正則表達(dá)式RegExp

正則表達(dá)式在許多編程語(yǔ)言中都具有重要得作用,學(xué)會(huì)立正則表達(dá)式對(duì)編程處理數(shù)據(jù)具有事半功倍的作用

正則表達(dá)式得模式修飾符

  • 參數(shù) | 含義
    ---- | ---
    i | 忽略大小寫
    g | 全局匹配
    m | 多行匹配

1.兩種創(chuàng)建方式

var  box =   new RegExp("box","i");
var box =   /box/i;

2.RegExp對(duì)象的方法

  • 方法 | 功能
    ---- | ---
    exec | 一個(gè)在字符串中執(zhí)行查找匹配的RegExp方法,它返回一個(gè)數(shù)組(未匹配到則返回null)
    test | 一個(gè)在字符串中測(cè)試是否匹配的RegExp方法,它返回true或false。
    match| 一個(gè)在字符串中執(zhí)行查找匹配的String方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回null。
    search| 一個(gè)在字符串中測(cè)試匹配的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));

使用一條語(yǔ)句實(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ù)組

字符類

  • 元字符/元符號(hào) | 匹配情況
    ---- | ---
    . | 匹配除換行符以外得任意字符
    [a-z0-9] |匹配括號(hào)中的字符集中得任意字符
    [^a-z0-9]| 匹配任意不在括號(hào)中的字符集中得字符
    \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

貪婪與惰性 即是在貪婪匹配符后面加?號(hào)

  • 貪婪 | 惰性
    ---- | ---
  • | +?
    {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 + '|');

參考文檔
javascriptMDN
李炎恢javascript高級(jí)教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容