正則表達式是一個拆分字符串並查詢相關信息的過程;是現代開發中很重要的一環。做爲一個web開發人員必須緊緊掌握這項技能,才能盡情得在js中馳騁。web
正則表達式(regular expression)和Javascript的其餘對象類型同樣,也就是咱們常常看到的RegExp對象,它有二種方式來建立:正則表達式
第一種:正則字面量形式express
var test= /pattern/flags;
第二種:RegExp對象構造函數形式c#
var test=new RegExp(pattern,flags);
參數pattern是一個字符串,指定了正則表達式的模式。數組
參數flags包含屬性 "g"、"i" 和 "m",分別用於指定全局匹配、區分大小寫的匹配和多行匹配。函數
test():spa
檢測所搜索的字符串是否與該正則模式匹配,返回true或false。code
例如:regexp
var a="aaisccc",demo=/\D/,d=demo.test(a);
alert(d);//true
exec(str):對象
檢測所搜索的字符串是否與正則模式匹配,它返回一個數組,其中存放匹配的結果,未找到匹配,則返回null。
參數str表示要匹配正則表達式的字符串。
例子:
var a="1a2b3c456he"; var test=/\d/g; var t; while((t=test.exec(a))!=null){document.write(t);//123456}
上述代碼經過循環中反覆地調用 exec() 方法,來得到完整的匹配信息。
該方法相似 indexOf() ,可是它返回指定的值,而不是字符串的位置。
例子:
var a="1a2b3c456he";
var test=/\d+/g;
var t; t=a.match(test); document.write(t);//[1,2,3,456]
語法:string.replace(regexp/substr,replacement)
參數regexp/substr表示子字符串或要替換的模式的 RegExp 對象。
參數replacement表示要替換的文本或函數。此外,replacement 中的 $ 字符具備特定的含義;$一、$二、...、$9表示將要替換與 regexp 中的第 1 到第 9 個子表達式相匹配的文本。
例子:
var a="1a2b3c456d"; var test=/\d+/g; var t; t=a.replace(test,"#"); document.write(t);//#a#b#c#d
去除字符串先後空格:
var a=" 1a2b3c456d "; var test=/(^\s*)|(\s*$)/g; var t; t=a.replace(test,""); document.write(t);//1a2b3c456d
//------------------------------------
// 其中在第二個參數中能夠插入回調函數
// 能夠將上面的例子改成 t=a.replace(test.fn)
// function fn(){return "";}功能與上面相同
//------------------------------------
該方法將一個字符串分割爲子字符串,而後以字符串數組形式返回。
例子:
var a="a5h4a"; var t; t=a.split(/\d/g); document.write(t);//a,h,a
該方法搜索與正則表達式相匹配的子字符串。返回與正則匹配到的第一個子串的位置。匹配不到則返回-1。
與indexOf方法不一樣的是它的參數是強制正則的,若是傳入一個非正則表達式對象,則會使用 new RegExp(obj) 隱式地將其轉換爲正則表達式對象。search() 方法不執行全局匹配,它將忽略標誌 g。
例子:
var a="abc5h4a"; var t=a.search(/\d/); document.write(t);//3
咱們應瞭解到正則表達式中全部的字母和數字都是按照字面意思與自身相匹配的,JavaScript的正則表達式還經過以反斜槓(\)開頭的轉義序列支持某些非字母字符。
正則表達式中的元字符
. 查找任意字符,除了換行和行結束符。等價於[^\n]
\w 查找單詞字符。 等價於[a-zA-Z0-9]
\W 查找非單詞字符。等價於[^a-zA-Z0-9]
\d 查找數字。 等價於[0-9]
\D 查找非數字字符。等價於[^0-9]
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\0 查找 NUL 字符。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找製表符。
\v 查找垂直製表符。
\xxx 查找以八進制數 xxx 規定的字符。
\xdd 查找以十六進制數 dd 規定的字符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。
方括號"[ ]"
[abc] 查找方括號之間的任何字符。
[^abc] 查找任何不在方括號內的字符。
[0-9] 查找 0 至 9 的數字。
[a-z] 查找小寫 a 到 z 的字符。
[A-Z] 查找 A 到Z 的字符。
分別表示一個字符串的開始和結束位置。
這三個符號它們分別表示「0個或更多」,「一個或更多」還有「0個或一個」。
*等價於{0,}
?等價於 {0, 1}
+等價於{1,}
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
字符| 用於分隔供選擇的字符。
還能夠分爲
•捕獲性分組("()")
•非捕獲性分組("(?:)")
捕獲分組通常使用小括號指定一個子表達式後,匹配這個子表達式的文本(也就是此分組捕獲的內容)能夠在表達式或其它程序中做進一步的處理。默認狀況下,每一個捕獲組會自動擁有一個組號,規則是:從左向右,以分組的左括號爲標誌,第一個出現的分組的組號爲1,第二個爲2,以此類推。
例子:
var a="5552-41"; var t=a.replace(/(\d+)-(\d+)/,"$2-$1"); document.write(t);//41-5552
非捕獲組只匹配結果,但不捕獲結果,也不會分配組號,固然也不能在表達式和程序中作進一步處理。
看個例子:
var a="5552-41"; var t=a.replace(/(?:\d+)-(\d+)/,"$1-$2"); document.write(t);//41-$2 從結果能夠看出來,第一個四位數字沒有被捕獲到。因此$1爲(\d{+})捕獲的串。
引用前面捕獲存儲的內容,相似\1,\2這樣的語法,來看例子就明白了:
var a="abcddf"; var c=a.match(/([a-f])\1/); document.write(c);//dd,d
// \1是動態肯定的,根據前面的捕獲組來肯定;例如第一次捕獲的是a,則將a被放在一個捕獲組裏,這個捕獲組的編號是1;
//由於編號是1的捕獲組裏存放的是上一步中捕獲的a,因此這個就是指代a,因此的意思就是再次匹配a;失敗;接着下一輪匹配直到匹配到dd這個字符;成功。\1\1