/pattern/attributes,表示正則表達式,它是對字符串執行模式匹配的強大工具。javascript
建立方法:java
一、new RegExp(pattern, attributes);(不推薦)須要轉義。正則表達式
二、/pattern/attributes對象字面量。效率更高。數組
參數:函數
參數 pattern 是一個字符串,指定了正則表達式的模式或其餘正則表達式。工具
參數 attributes 是一個可選的字符串,包含屬性 "g"、"i" 和 "m",分別用於指定全局匹配、區分大小寫的匹配和多行匹配。ECMAScript 標準化以前,不支持 m 屬性。若是 pattern 是正則表達式,而不是字符串,則必須省略該參數。測試
返回值:spa
一個新的 RegExp 對象,具備指定的模式和標誌。若是參數 pattern 是正則表達式而不是字符串,那麼 RegExp() 構造函數將用與指定的 RegExp 相同的模式和標誌建立一個新的 RegExp 對象。code
若是不用 new 運算符,而將 RegExp() 做爲函數調用,那麼它的行爲與用 new 運算符調用時同樣,只是當 pattern 是正則表達式時,它只返回 pattern,而再也不建立一個新的 RegExp 對象。regexp
exec():RegExpObject.exec(string)方法用於檢索字符串中的正則表達式的匹配。返回一個數組,其中存放匹配的結果。若是未找到匹配,則返回值爲 null。
exec() 方法的功能很是強大,它是一個通用的方法,並且使用起來也比 test() 方法以及支持正則表達式的 String 對象的方法更爲複雜。
咱們能夠看得出,在調用非全局的 RegExp 對象的 exec() 方法時,返回的數組與調用方法 String.match() 返回的數組是相同的。(太複雜謹慎用)
test():RegExpObject.test(string)方法用於檢測一個字符串是否匹配某個模式。若是字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,不然返回 false。經常使用。經常使用來測試字符串是否包含已知的內容。
search():stringObject.search(regexp)方法用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串。
返回值:stringObject 中第一個與 regexp 相匹配的子串的起始位置。註釋:若是沒有找到任何匹配的子串,則返回 -1。
說明:search() 方法不執行全局匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,而且老是從字符串的開始進行檢索,這意味着它老是返回 stringObject 的第一個匹配的位置。search() 對大小寫敏感.
<script type="text/javascript"> var str="Visit W3School!" document.write(str.search(/W3School/));//6 </script>
match(): stringObject.match(searchvalue)||stringObject.match(regexp),方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。
該方法相似 indexOf() 和 lastIndexOf(),可是它返回指定的值,而不是字符串的位置。
返回值: 存放匹配結果的數組。該數組的內容依賴於 regexp 是否具備全局標誌 g。
replace(): stringObject.replace(regexp/substr,replacement),方法用於在字符串中用一些字符替換另外一些字符,或替換一個與正則表達式匹配的子串。
返回值: 一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。
<script type="text/javascript"> var str="Visit Microsoft!" document.write(str.replace(/Microsoft/g, "W3School"));//Visit W3School! </script>
子表達式替換
name = "Doe, John"; document.write(name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1")); 返回:John Doe
使用匹配函數
name = 'aaa bbb ccc'; uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} ); // \b:匹配單詞邊界(開頭和結尾), \w:匹配任意數字字母下劃線,+:匹配1到屢次,最終也就是匹配到了aaa||bbb||ccc。這裏的函數參數就是匹配的結果,要通過函數處理 document.write (uw); 返回值:Aaa Bbb Ccc
轉義字符
function escapeHtml(str){ return str.replace(/[<>"'&]/g,function(match){ switch(match){ case "<" : return "<"; case ">" : return ">"; case "&" : return "&"; case "\"" : return """; case "\'" : return """; } }); } escapeHtml('<li class="a3">2&s</li>');
千位分隔符:使用正則與replace()方法
function milliFormat(s){//添加千位符 s = s.toString(); if(/[^0-9\.]/.test(s)) return "invalid value"; s=s.replace(/^(\d*)$/,"$1."); s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1"); s=s.replace(".",","); var re=/(\d)(\d{3},)/; while(re.test(s)){ s=s.replace(re,"$1,$2"); } s=s.replace(/,(\d\d)$/,".$1"); return s.replace(/^\./,"0.") }
?= :向前查找,指定了一個必須匹配大不在結果中返回的模式。向前查找實際上就是一個子表達式。須要匹配的文本放在"="後邊。匹配到可是最終並無顯示到最終的結果中。
這裏的$0表示第一個子式(\d);
這裏的$1表示第二個子式(?=(\d));
這個還要再研究研究。上邊的還不能匹配負值。