本片介绍 javascript 里的正则表达式
是什么
遇到不认识的事物时,人们第一想到的可能是想知道这个东西,是什么?但是,实际上定义一个东西很难,即使是较为恰当的描述,也可能是晦涩难懂的。本篇选择直接略过这个问题。
而正则表达式作为一个“工具”,更为直接的描述方式是,这个东西能用来干什么,以及怎么使用它。
功能
正则表达式可以用来描述一个字符串。
比如:
- 以字母 A 开头的字符串
- 不包含数字的字符串
- 包含大小写字母、数字及特殊符号的字符串
- 符合 email 地址规则的字符串
- ……
显然,正则表达式和字符串的关系非同一般。字符串上还有几个方法,与正则表达式有关。
String 上的方法
search
可能你这么用过 String.search 方法:
var str = 'aaa123aaa';
var index = str.search('123');
console.log(index); // 3
乍一看和 String.indexOf 差不多,确实这样,如果 search 方法收到一个字符串参数( 比如 A.search(B)
),会像 indexOf 一样,返回 B 字符串在 A 字符串第一次出现的位置。和 indexOf 方法不同的是,search 方法可以接收正则表达式对象,假设有一个对象 R 表示“数字组成的字符串”,那么就会有下面的结果:
var R = xxxx; // 这里先不考虑如何创建正则表达式对象
var str = 'aaa123aaa';
var index = str.search(R);
console.log(index); // 3
相同的,search 方法也可以用来检索“非数字、字母”第一次出现的位置、“大写字母第一次出现的位置”、“ ‘abc’ 或者 ‘bbc’ 或者 ‘ccc’ 第一次出现的位置” ……
replace
这个就是很常用的方法了:
var str = 'aaa123aaa';
var str2 = str.replace('123',0);
console.log(str2); // aaa0aaa
那么上例中的 str2 同样可以替换为一个正则表达式对象:把字符串中的数字替换为xxx,把非数字、字母替换为 ""
(删除非数字字母的字符)
match
码者前两天正好用到了这个方法,需求是获取本页路径最后一个反斜杠后面的内容。先上码:
var path = 'http://www.xxx.com/api/user/6'; // 也就是获取 /6
var R= xxxx; // 此处的 R 假设表示“最后一个 / 以及后面的内容
var results = path.match(R);
var result = results[0];
console.log(result); // "/6"
不难理解:match 方法匹配正则表达式描述的子字符串,并返回匹配到的结果。
RegExp 上的方法
在 javascript 里,像有关数学方面的操作,我们会想到 Math 对象,比如 Math.ceil, Math.floor 方法;像有关日期的操作,我们会想到 Date 对象,比如 Date.now, Date.getTime;有一个叫 RegExp 的对象,用来封装一些有关正则表达式方面的方法。
test
这是可能是正则表达式最简单,使用率最高的方法了吧。比如注册账户的时候,我们需要检测一下用户输入的手机号是否是正确的格式。就可以:
var R = xxxx; // 一个用来描述手机号格式的正则表达式对象
var tel = '1564xxxx330';
var result = R.test(tel);
console.log(result); // true 或者 false
可以说,RegExp.test 就是用来检验一个字符串的格式
exec
这是一个和 String.match 方法很像的方法,本文重点在对正则表达式的认识,不再赘述。
以上所有例子、方法都只大致介绍一个方法最基本的功能,其实正则表达式的功能远比本文所说的强大很多很多,而且还有更多实用的方法。更详细的内容请百度(不建议一开始就把所有功能记住,建议用到的时候看一下),比如搜索关键字 js+match