《javascript高级程序设计》学习笔记(九):正则表达式
正则表达式的用法十分复杂,完全可以用一本书来讲述。这里只记录一些简单的常用的用法。
1.js里面通过RegExp类来实现正则表达式的。
var reCat = new RegExp("cat"); //匹配串中第一个"cat"
var reCat = new RegExp("cat","g"); //匹配串中所有的"cat","g"是global的意思
var reCat = new RegExp("cat","gi"); //匹配串中所有的"cat",不区分大消息,"i"是insensitive的缩写
var reCat = /cat/gi; //perl风格
2.RegExp的方法
(1)test() 判断是否匹配,返回 true 或者 false
var sTomatch ="cat";
var reCat = /cat/;
alert(reCat.test(sTomatch));//outputs true
(2)exec() 返回一个数组,数组中的第一个条目是第一个匹配
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/;
var arrMatches = reAt.exec(sTomatch);
alert(arrMatches.toString()); //outputs 'at'
3.String对象对正则表达式的支持
(1)match()方法
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches.toString()); //outputs 'at,at, At ,aT ,aT ,at';
(2)replace()方法
var sToChange = "this red paper is not very red";
alert(sToChange.replace("red","blue"));//只替换第一个"red",outputs "this blue paper is not very red"
要想全部替换,如下
var sToChange = "this red paper is not very red";
var reRed = /red/gi;
alert(sToChange.replace(reRed,"blue"));
(3)split()方法
var sColor = "red,blue,yellow,green";
var reCom = /\,/ ; //因为","是正则表达式的元字符,所以用"\"来转义
var arrColors = sColor.split(reCom);
上面方法的效果等同于
var sColor = "red,blue,yellow,green";
var arrColors = sColor.split(",");
4.简单模式
(1)元字符。
正则表达式的所有元字符如下:
( [ { \ ^ $ | ) ? * + .
任何正则表达式要使用元字符,都必须转义:
var reTest = /\?/ ;
或者:
var reTest = new RegExp("\\?"); //注意:是两个反斜杠,为了避免js像处理 \n 一样处理 \? ,必须双重转义。
如果删除字符串中的所有换行符,如下:
var sNewStr = sOldStr.replace(/\n/g,"");
(2)字符类:
<1>.简单类 使用[abc] ,表示匹配中括号内的字符
var reTest = /[abc]at/gi; //匹配串中'at'字符前是'a'或者'b'或者'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'bat, Cat, baT, cat';
<2>.负向类 使用[^abc],表示不匹配中括号内的字符
var reTest = /[abc]at/gi; //匹配串中'at'字符前不是'a'不是'b'不是'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[^abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'fAt,faT';
<3>.范围类 [a-z] ,表示匹配a到z范围之间的
例如:
var sTomatch = "num1,num2,num3,num4,num5";
var reAt = /num[1-3]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,num2,num3';
<4>.组合类 [a-z1-4\n] 标识匹配所有a~z,1~4 以及一个换行符
例如:
var sTomatch = "num1,numanuma,numb,num4,num5,num?num3numt,num9";
var reAt = /num[1-3a-m\n]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,numa,numa,numb,num?,num3';
<5>.预定义类 由于经常用到一些模式,正则表达式预定义了一些常用匹配:如下:
<6>.简单量词,如下表:
例如,想匹配单词bread,red或read:
var reB = /b?rea?d/;
1.js里面通过RegExp类来实现正则表达式的。
var reCat = new RegExp("cat"); //匹配串中第一个"cat"
var reCat = new RegExp("cat","g"); //匹配串中所有的"cat","g"是global的意思
var reCat = new RegExp("cat","gi"); //匹配串中所有的"cat",不区分大消息,"i"是insensitive的缩写
var reCat = /cat/gi; //perl风格
2.RegExp的方法
(1)test() 判断是否匹配,返回 true 或者 false
var sTomatch ="cat";
var reCat = /cat/;
alert(reCat.test(sTomatch));//outputs true
(2)exec() 返回一个数组,数组中的第一个条目是第一个匹配
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/;
var arrMatches = reAt.exec(sTomatch);
alert(arrMatches.toString()); //outputs 'at'
3.String对象对正则表达式的支持
(1)match()方法
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches.toString()); //outputs 'at,at, At ,aT ,aT ,at';
(2)replace()方法
var sToChange = "this red paper is not very red";
alert(sToChange.replace("red","blue"));//只替换第一个"red",outputs "this blue paper is not very red"
要想全部替换,如下
var sToChange = "this red paper is not very red";
var reRed = /red/gi;
alert(sToChange.replace(reRed,"blue"));
(3)split()方法
var sColor = "red,blue,yellow,green";
var reCom = /\,/ ; //因为","是正则表达式的元字符,所以用"\"来转义
var arrColors = sColor.split(reCom);
上面方法的效果等同于
var sColor = "red,blue,yellow,green";
var arrColors = sColor.split(",");
4.简单模式
(1)元字符。
正则表达式的所有元字符如下:
( [ { \ ^ $ | ) ? * + .
任何正则表达式要使用元字符,都必须转义:
var reTest = /\?/ ;
或者:
var reTest = new RegExp("\\?"); //注意:是两个反斜杠,为了避免js像处理 \n 一样处理 \? ,必须双重转义。
如果删除字符串中的所有换行符,如下:
var sNewStr = sOldStr.replace(/\n/g,"");
(2)字符类:
<1>.简单类 使用[abc] ,表示匹配中括号内的字符
var reTest = /[abc]at/gi; //匹配串中'at'字符前是'a'或者'b'或者'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'bat, Cat, baT, cat';
<2>.负向类 使用[^abc],表示不匹配中括号内的字符
var reTest = /[abc]at/gi; //匹配串中'at'字符前不是'a'不是'b'不是'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[^abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'fAt,faT';
<3>.范围类 [a-z] ,表示匹配a到z范围之间的
例如:
var sTomatch = "num1,num2,num3,num4,num5";
var reAt = /num[1-3]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,num2,num3';
<4>.组合类 [a-z1-4\n] 标识匹配所有a~z,1~4 以及一个换行符
例如:
var sTomatch = "num1,numanuma,numb,num4,num5,num?num3numt,num9";
var reAt = /num[1-3a-m\n]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,numa,numa,numb,num?,num3';
<5>.预定义类 由于经常用到一些模式,正则表达式预定义了一些常用匹配:如下:
代码 | 等同于 | 匹配 |
---|---|---|
. | [^\n\r] | 除了换行和回车之外的任意字符 |
\d | [0-9] | 数字 |
\D | [^0-9] | 非数字 |
\s | [ \r\n\x0B\f\r] | 空白字符 |
\S | [^\r\n\x0B\f\r] | 非空白字符 |
\w | [a-zA-Z_0-9] | 单词字符(所有的字母、数字、下划线) |
\W | [^a-zA-Z_0-9] | 非单词字符 |
<6>.简单量词,如下表:
代码 | 描述 |
---|---|
? | 出现零次或一次 |
* | 出现零次或多次(任意次) |
+ | 出现一次或多次(至少出现一次) |
{n} | 一定出现n次 |
{n,m} | 至少出现n次,但不超过m次 |
{n,} | 至少出现n次 |
例如,想匹配单词bread,red或read:
var reB = /b?rea?d/;