千万别把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 
//全文查找的范围大于多行查找

 

posted on 2015-04-24 15:24  web369  阅读(11280)  评论(0编辑  收藏  举报

导航