1.RegExp物件
正則運算式的基本語法是:/正則運算式主體/修飾符(可選),這種創建正則的方法稱為“字面量創建正則運算式”,
在 js中已經為正則運算式提供了一個“建構式RegExp”,我們可以通過這個建構式生成正則運算式的實體,
這種創建正則的方法稱之為“建構式創建正則運算式”,
對于RegExp函式生成的正則實體,既能夠和之前使用正則運算式一樣直接使用,還可以呼叫一些RegExp獨有的方法,
語法:
var reg = new RegExp('正則運算式主體','修飾符'); //RegExp也稱為“正則類”
注意,通過建構式方式創建正則運算式,引數均采用“字串”的形式來宣告!
特別注意,這種方式的正則運算式主體在使用元字符時,需要使用轉義字符“\”,比如“\\d、\\s”等
2.RegExp物件方法
① test()方法,用于判斷在目標字串中是否存在滿足正則運算式規則的子字串,回傳值為Boolean,
語法:正則運算式 .test( ' 指定字串 ' ); // true || false
示例:
var regExp = new RegExp('ab', 'g');
var res = regExp .test('abc123AABBCC');
console .log(res); //回傳值為“true”
RegExp中提供的方法對于“字面量創建正則運算式”也是適用的,示例如下:
console.log(/ab/g .test('abc123AABBCC')); // true
② exec()方法,用于查找在目標字串中“第一個”滿足正則運算式的子字串出現的“下標和內容”
回傳值是一個資訊集合(物件),可以像陣列一樣使用,查找失敗則回傳 null
語法:正則運算式 .exec('目標字串');
示例01:
var regExp = new RegExp('ab', 'ig');
var res = regExp .exec('abc123AABBCC');
console .log(res); //回傳值:["ab", index: 0, input: "abc123AABBCC", groups: undefined]
res = regExp .exec('abc123AABBCC');
console .log(res); //回傳值:["ab", index: 7, input: "abc123AABBCC", groups: undefined]
res = regExp .exec('abc123AABBCC');
console .log(res); //回傳值:null
可以看出,當 exec()方法連續多次查找時,每次查找都是建立在前一次的基礎上,依次向后匹配,
這是由于RegExp正則物件中提供了一個隱式引數“lastIndex”,
這個引數將記錄每次執行檢索完成時,匹配結果的最后一個字符的下標,并且將其作為下次檢索的開始位置,
這個屬性是可寫的,
如果上述示例中第一次檢索完成后增加“res.lastIndex=0;”,那么第二次檢索回傳值將和第一次相同,
示例02:
var regExp = new RegExp('(ab)c', 'ig');
var res = regExp .exec('abc123AABBCC');
console .log(res); //回傳值:["abc", "ab", index: 0, input: "abc123AABBCC", groups: undefined]
console .log(res.length); // 回傳值:2
上述結果看出,當宣告正則的時候,如果引數中存在小括號(又稱作組匹配符號),
那么回傳結果的 length就不為“1”(即不僅查找一次),
也就是說第一次查找“正則主體內容”,第二次查找“組匹配內容”,兩次結果一起回傳,
3.檢索模式的“^和$”字符
“ ^ ”初位字符,表示判斷字串以某個內容開始
“ $ ”末位字符,表示判斷字串以某個內容結束
語法示例:
var regExp = new RegExp('^abc','ig'); //判斷是否以abc字串開始
var regExp = new RegExp('abc$','ig'); //判斷是否以abc字串結束
如果同時使用“^和$”(如“^abc$”),表示在目標字串中與正則字串本身相同
代碼示例:
var regExp=new RegExp('c$','ig');
var str='abc123AABBCC';
var res=regExp.test(str);
console.log(res); // true
4.重復類
重復類是正則運算式中使用大括號“{}”進行檢索的一種模式,{}用來匹配符合正則要求的字串連續出現的次數,
通常配合運算式模式一起使用
常見寫法有以下三種:
{n},表示檢索內容連續出現 n次
{n,},表示檢索內容至少連續出現 n次
{n,m},表示檢索內容連續出現大于等于 n次,小于等于 m次
語法示例:
var regExp = new RegExp('[a-z]{2}','g'); //表示 全域檢索連續出現的兩個小寫字母
代碼示例:
var regExp=new RegExp('[a-z]{2}','ig');
var str='abc123AABBCC';
var res=str.match(regExp);
console.log(res); //回傳結果:(4) ["ab", "AA", "BB", "CC"]
注意,如果不存在“組匹配符號”,那么重復類僅對其前面的一個字符有效!
示例代碼:
var regExp=new RegExp('ab{2}','ig');
var str='abcabc123AABBCC';
var res=str.match(regExp);
console.log(res); //回傳結果:["ABB"]
var regExp=new RegExp('(abc){2}','ig');
var str='abcabc123AABBCC';
var res=str.match(regExp);
console.log(res); //回傳結果:["abcabc"]
5.貪婪模式、懶惰模式
貪婪模式(greed)、懶惰模式(lazy),這兩種模式都是被固化至運算式內的兩種隱形的檢索模式,
它們不屬于任何一種前述的檢索模式,而是在此之外隱形生效的,
貪婪模式,
正則要求就一直向下匹配,直到無法再匹配為止的行為模式(如 n*)
懶惰模式,
一旦匹配到符合正則要求的內容就立即結束檢索的行為模式(如 n?)
在正則中,不同的符號可以隱式說明當前的正則是采用貪婪模式還是懶惰模式,
常見符號:
貪婪模式:+、*、{n,}、{n,m}、……
懶惰模式:+?、?、*?、{n}、{n}?、{n,m}?、……
代碼示例:
//---貪婪模式---
var regExp=new RegExp('s[a-z0-9]+s','ig');
var str='abscabc12S3AeSvBhC2286s96';
var res=str.match(regExp);
console.log(res); //回傳值:["scabc12S3AeSvBhC2286s"]
//---懶惰模式---
var regExp=new RegExp('s[a-z0-9]+?s','ig');
var str='abscabc12S3AeSvBhC2286s96';
var res=str.match(regExp);
console.log(res); //回傳值:["scabc12S", "SvBhC2286s"]
6.脫字符
脫字符是正則中“^”符號的一種特殊表達方式,表示“不是……”的意思,
當且僅當“^”符號出現在中括號的首位時,我們稱之為脫字符,
寫在正則主體首位而不是中括號內表示初位字符,寫在中括號內卻沒有寫在首位則表示普通字符,
中括號內只有脫字符時“[^]”,表示所有字符!
代碼示例:
var regExp=new RegExp('[^bc]+','ig');
var str='abscabc12S3AeSvBhC2286s96';
var res=str.match(regExp);
console.log(res); //回傳結果:["a", "s", "a", "12S3AeSv", "h", "2286s96"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/8406.html
標籤:JavaScript
