天天看点

Javascript学习笔记——正则表达式

1、正则表达式的创建

在js中创建正则表达式有两种方式:

1、创建对象

var reg=new RegExp(“规则”,”标志”);

使用此方法构造正则表达式时,是一个字符串,所以要注意用\来对一些字符进行转移.

var reg =new RegExp(“\d\d”,”i”);

2、字面量

var reg=/规则/标志;

var reg =/\d\d/i;

2、标志

i 不区分大小写

g 全局匹配

m 多行

3、规则

\ 转义字符,可以将下一个字符标记为一个特殊字符或一个原义字符或一个向后引用或一个八进制转义符,例如: “\n”表示换行符

[ ] 字符集合,匹配其中的任意一个字符

[a-z] 字符范围,匹配指定范围的任意一个字符

[^ ] 负值字符集合,匹配未包含的任意一个字符。

( ) 匹配子项,括号内为一个子表达式,子项可以获取供以后使用。

| 表示或者 ( x|y )相当于[xy]

{ n } n是一个非负整数,表示前面的字符出现n次

{ n, } n是一个非负整数,表示前面的字符至少出现n次

{ n,m } n,m是一个非负整数,且n < m,表示前面的字符至少出现n次,至多出现m次

^ 从开始位置匹配,如果设置了m标志,^也匹配“\n”或“\r”之后的位置。

$ 从结束位置匹配,如果设置了m标志,$也匹配“\n”或“\r”之前的位置。

+ 至少出现1次 ,{1,}

? 出现0次或1次 ,{0,1}

* 出现任意次,至少出现0次 ,{0,}

\s 匹配空格

\S 匹配非空格

\w 匹配包括下划线的任何单字符,[a-zA-Z0-9_]

\W 匹配任何非单字符[^a-zA-Z0-9_]

\d 匹配一个数字字符

\D 匹配一个非数字字符

\b 匹配一个单词边界

\B 匹配一个非单词边界

. 匹配除去“\n”之外的任一个字符

上面只介绍了一些常用的规则,下面这个速查表包含有正则的绝大多数的规则

正则表达式速查表

4、正则中常用的方法

1、test( )

RegExp.text(str);

对指定的字符串执行一个正则表达式搜索,返回一个布尔值,如果匹配成功返回true,否则返回false。

var reg=/\D/;

var str=”12,3456789”;

if(reg.test(str)){

document.write(“不全是数字”);

}else{

document.write(“全是数字”);

}

2、exec( )

RegExp.exec(str);

exec 查找并返回当前的匹配结果,并返回一个长度为1的数组。如果没有找到,则返回null

返回的数组还有三个属性:

index 当前匹配项的位置;

lastIndex 当前匹配项结束的位置(index + 当前匹配项的长度);

input 查找的字符串;

exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。

var str = “1a1b1c”;

var reg = new RegExp(“1.”, “g”);

var arr = reg.exec(str);

var arr2 = reg.exec(str);

var arr3 = reg.exec(str);

var arr4 = reg.exec(str);

console.log(arr);

console.log(arr2);

console.log(arr3);

console.log(arr4);

3、search( )

实际上这是字符串中的方法,但是该方法需要传入一个正则对象

str.search(RegExp);

该方法用于字符串的搜索,会返回匹配项出现的位置

var reg=/d/;

var str=”abcdefg”;

console.log( str.search(reg) ); //3

var reg=/bcde/;

console.log( str.search(reg) ); //1

4、match( )

此方法如同search也是字符串中的一个方法,需要传入一个正则对象

str.match(RegExp);

该方法作用如同exec,用于字符串匹配,并返回匹配成功的数组,但是该方法如果指定了参数 g,那么match 一次返回所有的结果。

var str=”a0b123c453de5fg7897h”;

var reg=/\d/;

console.log( str.match(reg) ); //0

var reg=/\d/g;

console.log( str.match(reg) ); //0,1,2,3,4,5,3,5,7,8,9,7

5、replace( )

用于字符串替换,返回替换后的字符串,这个方法是字符串的方法,只在字符串中使用的话只能进行单个字符的替换,但是当我们加上正则后,这个方法就有了很大的变化。

strObj.replace(RegExp,replacement);

replacement:规定替换文本或生成替换文本的函数(函数传入的参数是匹配到的子字符串,函数的返回值是替换后的子字符串)。

var str=”Hello World”;

var reg=/World/;

str=str.replace(reg,”Javascript”);

document.write(str+”

”); //Hello Javascript

var name = ‘aaa bbb ccc’;

var reg=/\b\w+\b/g;

var uw=name.replace(reg, function(word){

return word.substring(0,1).toUpperCase()+word.substring(1);}

);

document.write(uw+”

”);//Aaa Bbb Ccc

正则表达式需要经常练习和使用,因为正则表达式的规则比较多,而且比较繁琐,勤加练习才能逐渐掌握,通过写这篇博客,加深了自己对正则表达式的一些理解,也加强了对正则表达式规则的掌握程度。

继续阅读