千萬別把js的正則表達式方法和字符串方法搞混淆了


我們在字符串操作過程中肯定經常用了test() split() replace() match() indexof()等方法,很多人經常把用法寫錯了,包括我,所以今天細細的整理了下。

test()是判斷是字符串是否與正則表達式匹配,返回true | false;

//例1 現在有個要求,判斷字符串是不是數字
var reg=/^\d$/;  //匹配數字正則
var str="123";  //一個字符串
//是這樣寫呢
reg.test(str);
//還是這樣寫叱
str.test(str);

//例2 現在又有一個要求,替換字符串中所有的數字
var reg=/\d/g;  //匹配所有數字正則
var str="AAAA00000BBBBB11111CCCCCC";
//問題又來了,是這樣寫呢還是這樣寫
reg.replace(str,"");
str.replace(reg,"");

   同學們千萬別死記硬背,容易傷身體,只要我們搞清楚了這樣正則表方法就很容易掌握用法

  這些方法分為兩類,一類是正則表達式方法,另一類是字符串方法

  正則表達式方法這樣調用:reg.方法(字符串);

  字符串方法這樣調用 :字符串.方法(reg);

  具體的分類往下看吧……

 

一、正則表達式的定義
1、var reg=//參數;
2、var reg=new RegExp("","參數")

二、正則表達式的常用方法,方法分兩種一種正則表達式自定的方法和字符串操作方法
1、RegExp對象方法
  1.1、test():返回字符串是否與Reg匹配。

例:

var reg=/\d/;
var str1="123";
var str2="ABC";
reg.test(str1);//true
reg.test(str2);//false 

  1.2、exec():返回字符串中與reg首次匹配的值

var reg=/\d/;
var str1="923ABC";
reg.exec(str1);//9 

  1.3、compile():用於改變RegExp

var reg=/\d/;
var str1="923";
console.log(reg.test(str1));//true
reg.compile("\w");
console.log(reg.test(str1));//false

2、字符串操支持正則表達式的方法

  2.1、replace():替換reg匹配字符串

var reg=/\d/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--"));//AAA--BBBBCCCCDDDD
//用--替換字符串中數字,但結果發現卻只替換掉了第一個,因為reg默認匹配第個
//那么要替換所有的數字,需要在reg后面加個全部的參數 g            
var reg=/\d/g;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--"));//AAA--BBBB--CCCC--DDDD

  2.2、split():按reg匹配的值拆分成數組

var reg=/\d/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.split(reg));//["AAA", "BBBB", "CCCC", "DDDD"]

  2.3、match():返回reg匹配的第個字符串

var reg=/\d/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.match(reg));//"9"  返回第一個數字"9"

  2.4、search():返回reg匹配的第一個字符串的位置,沒有則返回-1

var reg=/\d/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.search(reg)); //3 返回第個數字 9的位置

3、很多人容易把以上兩個方法順序寫反。
  正則方法的調用是:reg.方法(字符串);
  字符串方法的調用:字符串.方法(reg);

三、參數:
g :全文查找

var reg=/\d/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--"));//AAA--BBBBCCCCDDDD
//用--替換字符串中數字,但結果發現卻只替換掉了第一個,因為reg默認匹配第個
//那么要替換所有的數字,需要在reg后面加個全部的參數 g            
var reg=/\d/g;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--"));//AAA--BBBB--CCCC--DDDD

i :忽略大小寫

var reg = /a/i;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--")); // AAA9BBBB2CCCC3DDDD           
            
var reg = /a/;
var str1 = "AAA9BBBB2CCCC3DDDD";
console.log(str1.replace(reg,"--")); //--AA9BBBB2CCCC3DDDD

m:多行查找

  這個有點不好理解,多行查找和全文查找有什么區別呢。我們來舉個例子看看

//例:全文查找        替換所有的A
    var reg = /A/g;
    var str1 = "AAA9BBBB2CCCCAAAA3DDDD";
    console.log(str1.replace(reg,"-")); // ---9BBBB2CCCC----3DDDD
//例:多行查找        
    var reg = /A/m;
    var str1 = "AAA9BBBB2CCCCAAAA3DDDD";
    console.log(str1.replace(reg,"-")); // -AA9BBBB2CCCCAAAA3DDDD

//多行查找一般用於有換行的字符中
    var reg = /^A/;
    var str1 = "BBBB9BBBB2CCCC\r\nAAAA3DDDD";
    console.log(str1.replace(reg,"-")); 
    //BBBB9BBBB2CCCC
    //AAAA3DDDD
    //字符串里有個換行符當正則匹配第一行后就結束了,所以這里就引用了換符符的功能
    var reg = /^A/m;
    var str1 = "BBBB9BBBB2CCCC\r\nAAAA3DDDD";
    console.log(str1.replace(reg,"-")); 
    //BBBB9BBBB2CCCC
    //-AAA3DDDD 
//全文查找的范圍大於多行查找

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM