本篇章为介绍正则表达式的下篇章——字符串中的正则API和RegExp对象。
2. 字符串中的正则API
2.1查找
(1) indexOf
- 当需要查找一个固定关键词出现位置时,可以使用indexOf。
- 语法:
str.indexOf("关键词"[,starti])
表示在str中从starti位置开始找下一个"关键词"的位置,其返回值为“关键词”第一字所处位置的索引下标。
- 注意:
- 如果省略starti,则默认从索引为0的位置开始向后查找;
- 如果找不到关键字,则返回-1;
- indexOf只支持查找一个固定不变的关键词。
(2) search
- 当需要用正则表达式查找一个符合要求词语的位置时,可以使用search。
- 语法:
str.search(/正则/i);
表示在str中查找符合正则规则要求的词语。它会返回关键词的索引位置,如果找不到,则会返回-1。
- 注意:
- 正则表达式是默认区分大小的,如果想忽略大小写,可以在正则表达式的第二个”/”后添加i,表示ignore(忽略大小写);
- search只能获取到符合正则表达式要求关键词的索引位置,不能获得内容。
(3) match
- 当需要查找符合正则表达式要求关键字的位置索引或者其匹配的内容时,可以使用match。
- 语法:
var arr=str.match(/正则/ig) //g global 全局/全部
表示在str中查找符合正则要求关键字的索引位置和内容。它的返回值时一个数组,即arr=[“0”:”关键词”,”index”:下标i];(注意:此处的数组是关联数组,实际上在JavaScript底层中,所有的数组都是关联数组,索引数组也是关联数组,索引数组中的数字索引也是字符串的形式)。如果找不到,则返回null。
- 注意:
match默认只查找到第一个符合正则表达式的关键字,但可以使用g来表示全部,即查找所有向匹配的关键词,但是如果使用g,则无法返回向匹配正则表达式关键字的索引位置,只能返回内容。
(4) exec
- 当既需要查找向匹配正则表达式关键字的索引位置又要找到所匹配的内容,可以使用exec。exec是一个RegExp对象的方法,具体内容见
- 语法:
arr=reg.exec(str);
表示在str中查找下一个符合reg要求的关键字的内容和位置。如果反复调用reg.exec(),则自动会向后找下一个,找不到会返回null。返回值为 arr:[ "0":"关键词", "index": 关键词位置]。
2.1 替换
(1) 简单替换
- 将需要将符合正则表达式关键字替换为统一的新值。
- 语法:
str.replace(/正则/ig,"新值");
表示查找str中所有符合正则表达式关键字,并将其统一替换为新值。
- 注意:
但其存在一个问题:所有字符串API都无权修改原字符串,只能返回新字符串。因此,如果需要替换原字符串,就需要手动赋值回原变量中。 - 比如:
删除字符串开头的空字符:
str.replace(/^\s+/,"");
删除字符串开头和结尾的空字符:
str.replace(/^\s+|\s+$/g,"");
(2) 高级替换
- 在高级替换情况下,可以根据每次找到的关键词的不同,动态地选择需要替换的值。
- 语法:
str=str.replace(/正则/ig, function(kword){
根据kword的不同,动态生成新值
return 新值
});
表示查找str中所有符合正则表达式的关键字,并且每找到一个关键字时,就自动调用以此回调函数,而replace函数会自动将回调函数返回的新值,替换字符串中原符合正则表达式的关键字。在当每次调用回调函数时,会自动传入本次找到的关键字给kword,然后回调函数会根据每次收到的kword的不同,动态地返回新值给replace函数。
2.3 切割
- 当需要将一个字符串,按照指定的切割符,切割成多段的子字符串时,可以使用split。
(1) 简单切割
- 简单切割下,切割符是固定的。
- 语法:
arr=str.split("切割符");
表示将str按指定的切割符,切割为多段的子字符串,并将其保存在数组arr中。
- 比如:
打散字符串为字符数组:
chars=str.split("");
(2) 复杂切割
- 复杂切割下,切割符不是固定的。
- 语法:
arr=str.split(/正则/i);
表示将str按照符合正则表达式的关键字进行切割。
3.RegExp对象
- RegExp对象是保存了一条正则表达式,并提供了用正则表达式执行验证和查找的API 的对象。当需要在程序中保存和使用正则表达式时,都要使用RegExp对象。
3.1 创建RegExp对象
(1) 直接量创建
- 当正则表达式是固定不变的时候时,可以使用直接量创建方式创建RegExp对象。
- 语法:
var reg=/正则/ig;
(2) 构造函数方式创建
- 当正则表达式需要在运行时才动态生成时要使用构造函数方式创建RegExp对象。
- 因为此时需要动态改变正则表达式的内容,需要调用JavaScript语法才能使用,但在“//”中不能使用JavaScript语句,因此只能使用构造函数形式创建正则表达式,因为在第一个参数中可以使用JavaScript语句。
- 语法:
var reg=new RegExp("正则","ig");
3.2 RegExp对象的API
(1) 验证
- 当需要检测字符串是否符合正则格式的要求时,可以使用RegExp对象的API ——test。
- 语法:
var reg=new RegExp("正则","ig");
var bool=reg.test(str);
表示用正则表达式reg,检测str是否符合正则表达式的要求,如果符合就返回true。
- 注意:
此验证API默认正则表达式只要找到部分内容与正则匹配就返回true。如果必要从头匹配到末尾,必须在正则表达式前添加”^”,在正则表达式后添加”$”,表示从头到尾都需要匹配。
(2) 查找
- 查找可以获取每个匹配正则表达式的关键词位置索引和内容。
- 此查找详细见2.1。