一、js的正则表达式
1、什么是正则表达式
正则表达式(regular expression)是一个描述字符模式的对象,ECMAScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。
2、正则表达式的创建方式:
2.1 方式1:new方式创建
var box = new RegExp('box', 'ig');
2.2 方式2:字面量方式创建
var box = /box/ig;
2.3第一个参数表示被匹配的字符串,第二个参数表示正则的匹配方式,主要有三个匹配类型分别为:
i:忽略被匹配字符串的大小。
g:被匹配的字符串进行全局匹配。
m:被匹配的字符串进行多行匹配。
3、正则表达式的匹配方法:
3.1方法1:new()方法
3.1.1使用new运算符的test方法示例:
var pattern = new RegExp('box', 'i'); //创建正则模式,不区分大小写
var str = 'This is a Box!'; //创建要比对的字符串
alert(pattern.test(str)); //通过test()方法验证是否匹配,返回的是个布尔值,true或flase
3.1.2使用字面量方式的test方法示例:
var pattern = /box/i; //创建正则模式,不区分大小写
var str = 'This is a Box!';
alert(pattern.test(str));
3.1.3使用一条语句实现正则匹配
alert(/box/i.test('This is a Box!')); //模式和字符串替换掉了两个变量
3.2方法2:exec()方法
3.2.1方法与test()类似。
var pattern = /box/i; //创建正则模式,不区分大小写
var str = 'This is a Box!'; //创建要比对的字符串
alert(pattern.exec(str)); //匹配了返回数组,否则返回null
4、string中的正则
4.1使用match方法获取匹配数组
var pattern = /box/ig; //全局搜索
var str = 'This is a Box!,That is a Box too';
alert(str.match(pattern)); //匹配到两个Box,Box,返回的是匹配到的字符串
alert(str.match(pattern).length); //获取数组的长度
注释:如果是局部搜索,数组中就只能匹配到一个元素。
4.2 使用search来查找匹配数据
var pattern = /box/ig;
var str = 'This is a Box!,That is a Box too';
alert(str.search(pattern)); //查找到第一个符合条件的字符串就返回该位置,如果没有查找到则返回-1
注释:因为search方法查找到第一个就会返回,也就是说无需g全局
4.3 使用replace替换匹配到的数据
var pattern = /box/ig;//全局搜索
var str = 'This is a Box!,That is a Box too';
alert(str.replace(pattern, 'Tom')); //将Box替换成了Tom,返回的是替换后的字符串
注释:如果是全局查找就会替换查找到的所有字符串
4.4使用split拆分成字符串数组
var pattern = / /ig;
var str = 'This is a Box!,That is a Box too';
alert(str.split(pattern)); //将空格拆开分组成数组,返回的是个查分后的数组
5、RegExp对象的静态和动态属性
5.1RegExp对象的静态属性
属 性 |
短 名 |
含 义 |
input |
$_ |
返回当前被匹配的字符串 |
lastMatch |
$& |
返回最后一个匹配的字符串 |
lastParen |
$+ |
返回最后一对圆括号内的匹配子串 |
leftContext |
$` |
返回最后一次匹配字符串的前面的子符串 |
multiline |
$* |
用于指定是否所有的表达式都用于多行的布尔值 |
rightContext |
$' |
在上次匹配之后的子串 |
5.2使用静态属性时应该先创建好正则然后再通过RegExp对象来执行它的属性
eg:
var pattern = /(g)oogle/;
var str = 'This is google';
pattern.test(str);
alert(RegExp.input); //This is google!
alert(RegExp.leftContext); //This is
alert(RegExp.rightContext); //!
alert(RegExp.lastMatch); //google
alert(RegExp.lastParen); //返回最后一对圆括号内的匹配子串g
alert(RegExp.multiline); //false
注释:Opera不支持input、lastMatch、lastParen和multiline属性。IE不支持multiline属性。所有的属性可以使用短名来操作 RegExp.input可以改写成RegExp['$_'],依次类推。但RegExp.input比较特殊,它还可以写成RegExp.$_。
5.3RegExp对象的实例属性
属 性 |
含 义 |
global |
Boolean值,表示g是否已设置 |
ignoreCase |
Boolean值,表示i是否已设置 |
lastIndex |
整数,代表下次匹配将从哪里字符位置开始 |
multiline |
Boolean值,表示m是否已设置 |
Source |
正则表达式的源字符串形式 |
5.4使用实例属性
var pattern = /google/ig;
alert(pattern.global); //true,创建正则时是否全局了
alert(pattern.ignoreCase); //true,创建正则时是否忽略大小写
alert(pattern.multiline); //false,创建正则时是否支持换行
alert(pattern.lastIndex); //0,下次的匹配位置
alert(pattern.source); //google,创建正则时正则表达式的源字符串
var pattern = /google/g;
var str = 'google google google';
pattern.test(str); //google,匹配第一次
alert(pattern.lastIndex); //6,第二次匹配的位
注释:以上基本没什么用。并且lastIndex在获取下次匹配位置上IE和其他浏览器有偏差,主要表现在非全局匹配上。lastIndex还支持手动设置,直接赋值操作,了解就好。
6、正则表达式中的元字符(正则表达式匹配模式的设置)
6.1正则表达式元字符是包含特殊含义的字符。反斜杠后的元字符将失去其本身含义而具有特殊含义。
字符类:单个字符和数字
元字符/元符号 |
匹配情况 |
. |
匹配除换行符外的任意字符 |
[a-z0-9] |
匹配括号中的字符集中的任意字符 |
[^a-z0-9] |
匹配任意不在括号中的字符集中的字符 |
d |
匹配数字 |
D |
匹配非数字,同[^0-9]相同 |
w |
匹配字母和数字及_ |
W |
匹配非字母和数字及_ |
[a-zA-Z] |
匹配26个大小写英文字母 |
字符类:空白字符
元字符/元符号 |
匹配情况 |