js內置對象RegExp及RegExp的方法

 

一、RegExp 對象:

/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。經常使用。經常使用來測試字符串是否包含已知的內容。

三、支持正則表達式的 String 對象的方法(這是String的方法):

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 "&lt;";
            case ">" : return "&gt;";
            case "&" : return "&amp;";
            case "\"" : return "&quot;";   
            case "\'" : return "&quot;";
         } 
     }); 
} 
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));

這個還要再研究研究。上邊的還不能匹配負值。

相關文章
相關標籤/搜索