正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式,可用于所有文本搜索和文本替换的操作。
入门须知
正则表达式是一门独立学科,用于匹配字符串。常用于检索,论文查重,爬虫,表单验证。
元字符是拥有特殊含义的字符
元字符 | 描述 |
---|---|
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\w | 查找所有的字母和数字 |
\W | 查找所有的非字母和数字 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符 |
方括号用于查找某个范围内的字符
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[0-9] | 查找从 0 至 9 的数字 |
(x|y) | 查找所有以“|”分隔的选项 |
数量词表示匹配的次数
数量词 | 描述 |
---|---|
{n} | 匹配n次 |
{n,m} | 匹配n~m次 |
{n,} | 匹配n+次 |
? | 匹配0或1次 |
+ | 匹配1或多次 |
* | 匹配0或多次 |
初始化
- 字面量
var pattern = /abc/igm;
其中,abc表示正则表达式主体,igm表示修饰符,i(ignore case)表示忽略大小写,g(global)表示全局匹配,m(multiline)表示多行匹配。修饰符在全局搜索中不区分大小写。
- 构造函数
var pattern = new RegExp("abc","igm");
在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。
使用字符串方法
search()
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
var str = "Visit Runoob!";
var n = str.search(/Runoob/i); //6
var n = str.search("Runoob"); //6
replace()
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
var str = "Visit Runoob!";
var txt = str.replace(/Runoob/i,"microsoft"); //'Visit microsoft!'
var txt = str.replace("Runoob","microsoft"); //'Visit microsoft!'
使用RegExp 对象方法
test()
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var patt = /e/;
patt.test("The best things in life are free!");
//字符串中含有 "e",所以该实例输出为:true
exec()
exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
var patt = /e/;
patt.exec("The best things in life are free!");
//字符串中含有 "e",所以该实例输出为: e
练习:给定一串字符,如何根据正则表达式查询出所有的符合模式的内容?
var str = "my phone is 18812344321, my emil is licy@briup.com, my name is charles, my friend is jacky, his phone is 17751229900, my friend is tom, his phone is 15912344432."
function search(str){
var pattern = /((188)|(177)|(159))\d{8}/g;
var result;
while(result = pattern.exec(str)){
console.log(result[0]);
}
}
/*
18812344321
17751229900
15912344432
*/