本部分主要承接上篇(http://www.cnblogs.com/ttcc/p/3959457.html),繼續總結正則表達式的獲取控制部分。html
獲取控制正則表達式
正則表達式元字符是包含特殊含義的字符。它們有一些特殊功能,能夠控制匹配模式的方式。反斜槓後的元字符將失去其特殊含義。數組
字符類:單個字符和數字this
元字符/元符號google |
匹配狀況spa |
.htm |
匹配除換行符外的任意字符blog |
[a-z0-9]ci |
匹配括號中的字符集中的任意字符字符串 |
[^a-z0-9] |
匹配任意不在括號中的字符集中的字符 |
\d |
匹配數字 |
\D |
匹配非數字,同[^0-9]相同(\d的反義) |
\w |
匹配字母和數字及_中任意一個字符 |
\W |
匹配非字母和數字及_中任意一個字符(\w的反 義) |
字符類:空白字符
元字符/元符號 |
匹配狀況 |
\0 |
匹配null字符 |
\b |
匹配空格字符 |
\f |
匹配進紙字符 |
\n |
匹配換行符 |
\r |
匹配回車字符 |
\t |
匹配製表符 |
\s |
匹配空白字符、空格、製表符和換行符 |
\S |
匹配非空白字符 |
字符類:錨字符
元字符/元符號 |
匹配狀況 |
^ |
行首匹配(從最開頭開始匹配) |
$ |
行尾匹配 |
\A |
只有匹配字符串開始處 |
\b |
匹配單詞邊界,詞在[]內時無效 |
\B |
匹配非單詞邊界 |
\G |
匹配當前搜索的開始位置 |
\Z |
匹配字符串結束處或行尾 |
\z |
只匹配字符串結束處 |
字符類:重複字符
元字符/元符號 |
匹配狀況 |
x? |
匹配0個或1個x |
x* |
匹配0個或任意多個x |
x+ |
匹配至少一個x |
(xyz)+ |
匹配至少一個(xyz) |
x{m,n} |
匹配最少m個、最多n個x(注:{m}表示必須m個;{m,}表示m個或m個以上) |
字符類:替代字符
元字符/元符號 |
匹配狀況 |
this|where|logo |
匹配this或where或logo中任意一個 |
字符類:記錄字符
元字符/元符號 |
匹配狀況 |
(string) |
用於反向引用的分組 |
\1或$1 |
匹配第一個分組中的內容 |
\2或$2 |
匹配第二個分組中的內容 |
\3或$3 |
匹配第三個分組中的內容 |
/*使用點元字符*/
var pattern = /g..gle/; //.匹配一個任意字符
var str = 'google';
alert(pattern.test(str));
/*重複匹配*/
var pattern = /g.*gle/; //.匹配0個一個或多個
var str = 'google'; //*,?,+,{n,m}
alert(pattern.test(str));
/*使用字符類匹配*/
var pattern = /g[a-zA-Z_]*gle/; //[a-z]*表示任意個a-z中的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /g[^0-9]*gle/; //[^0-9]*表示任意個非0-9的字符
var str = 'google';
alert(pattern.test(str));
var pattern = /[a-z][A-Z]+/; //[A-Z]+表示A-Z一次或屢次
var str = 'gOOGLE';
alert(pattern.test(str));
/*使用元符號匹配*/
var pattern = /g\w*gle/; //\w*匹配任意多個全部字母數字_
var str = 'google';
alert(pattern.test(str));
var pattern = /google\d*/; //\d*匹配任意多個數字
var str = 'google444';
alert(pattern.test(str));
var pattern = /\D{7,}/; //\D{7,}匹配至少7個非數字
var str = 'google8';
alert(pattern.test(str));
/*使用錨元字符匹配*/
var pattern = /^google$/; //^從開頭匹配,$從結尾開始匹配,開頭結尾必須都是google
var str = 'google';
alert(pattern.test(str));
var pattern = /goo\sgle/; //\s能夠匹配到空格
var str = 'goo gle';
alert(pattern.test(str)); //true
var pattern = /google\b/; //\b能夠匹配是否到了邊界
var str = 'google';
alert(pattern.test(str));
/*使用或模式匹配*/
var pattern = /google|baidu|bing/; //匹配三種其中一種字符串
var str = 'google';
alert(pattern.test(str)); //true
/*使用分組模式匹配*/
var pattern = /(google){4,8}/; //匹配分組裏的字符串4-8次(分組至關於一個字符)
var str = 'googlegoogle';
alert(pattern.test(str)); //false
var pattern = /8(.*)8/; //獲取8..8之間的任意字符
var str = 'This is 8google8';
str.match(pattern);
alert(RegExp.$1); //獲得第一個分組裏的字符串內容(前提是運行一下),這兒是:google
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'); //將兩個分組的值替換輸出
document.write(result); //baidu google
貪婪問題:
貪 婪 |
惰 性 |
+ |
+? |
? |
?? |
* |
*? |
{n} |
{n}? |
{n,} |
{n,}? |
{n,m} |
{n,m}? |
/*關於貪婪和惰性*/
var pattern = /[a-z]+?/; //?號關閉了貪婪匹配,只替換了第一個,不然用貪婪下面的都會變爲xxx。。。。。
var str = 'abcdefjhijklmnopqrstuvwxyz';
var result = str.replace(pattern, 'xxx');
alert(result);
//禁止了貪婪,開啓的全局(下面三段代碼好好理解!)
var pattern = /8(.*)8/; //使用了貪婪
var str = '8google8 8google8 8google8'; //匹配到了google8 8google8 8google
document.write(str.replace(pattern, '<strong>$1</strong>')); //結果:<strong>google8 8google8 8google</strong>
var pattern = /8(.*?)8/g; //使用了惰性,開啓全局
var str = '8google8 8google8 8google8';
document.write(str.replace(pattern, '<strong>$1</strong>'));
//此次結果正確了
//<strong>google</strong>
//<strong>google</strong>
//<strong>google</strong>
var pattern = /8([^8]*)8/g; //另外一種禁止貪婪(屏蔽掉8)
var str = 'This is 8google8, That is 8google8, There is 8google8';
var result = str.replace(pattern,'<strong>$1</strong>');
document.write(result);
/*使用exec返回數組*/
var pattern = /^[a-z]+\s[0-9]{4}$/i;
var str = 'google 2012';
alert(pattern.exec(str)); //返回整個字符串
var pattern = /^[a-z]+/i; //只匹配字母
var str = 'google 2012';
alert(pattern.exec(str)); //返回google
var pattern = /^([a-z]+)\s([0-9]{4})$/; //使用了分組
var str = 'google 2012';
var a = pattern.exec(str);
//alert(a.length); //3
//alert(a[0]); //a[0],返回匹配到的整個字符串google 2012
//alert(a[1]); //a[1],返回匹配到的第一個分組的字符串google
//alert(a[2]); //a[2],返回匹配到的第二個分組的字符串2012
var pattern = /(\d+)([a-z])/; //這個叫作捕獲性分組,全部的分組都捕獲返回
var str = '123abc';
var a = pattern.exec(str);
//a[0]返回123a
//a[1]返回123
//a[2]返回a
var pattern = /(\d+)(?:[a-z])/; //非捕獲性分組,只要在不須要捕獲返回的分組加上?:
var str = '123abc';
alert(pattern.exec(str));
/*使用分組嵌套*/
var pattern = /(a?(b?(c?)))/; //嵌套分組,從外往內獲取
var str = 'abc';
alert(pattern.exec(str));
//第一步:a[0],整個匹配到的字符串abc
//第二步:a[1],匹配第一個分組(a?(b?(c?))), abc
//第三步:a[2],匹配第二個分組(b?(c?), bc
//第三步:a[3],匹配第三個分組(c?), c
/*使用前瞻捕獲*/
var pattern = /(goo(?=gle))/; //goo後面必須跟着gle才能捕獲goo
var str = 'google';
alert(pattern.exec(str)); //注意這兒返回的是goo
/*使用特殊字符匹配*/
var pattern = /\.\[\/b\]/; //特殊字符,用\符號轉義便可
var str = '.[/b]';
alert(pattern.test(str));
/*使用換行模式*/
var pattern = /^\d+/mg; //啓用了換行模式
var str = '1.baidu\n2.google\n3.bing';
var result = str.replace(pattern, '#');
alert(result);
For my lover, CC !
Thank you, Mr Lee !