千万别把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
//全文查找的范围大于多行查找
上一篇:FastJson--阿里开源的速度最快的Json和对象转换工具


下一篇:MySQL必知必会笔记<2>