正则表达式:regular expression
常用于爬虫
用于字符串匹配判断,例如判断某个字符串是否为一个合法的手机号.
我这里用的js,不同语言声明正则不太一样,但正则表达式是一样的
在js中,正则表达式是一个对象,有两种创建方法:
正则表达式创建及匹配方式
第一种,通过构造函数创建.参数是正则表达式字符串.
var reg1 = new RegExp("\d");
第二种,通过字面量创建,直接使用//进行创建.把正则表达式字符串写在两个//中间(在js中是//,别的语言我就不知道了)
var reg2 = /[a-z]/;
判断字符串中是否包含abc
var reg3 = /abc/;
var str3 = "adsfabcjfksdj";
// 正则表达式对象的test方法,用于判断某个字符串是否满足正则表达式,参数是要验证的字符串,返回值是布尔值,满足返回true.
console.log(reg3.test(str3));
判断字符串是否以abc开头
// ^ 匹配字符串开始位置
var reg4 = /^abc/;
var str4 = "abcjrljwerjwe";
console.log(reg4.test(str4));
判断字符串是否是abc(后面只写表达式,不写输出了)
// $ 匹配字符串结束位置
var reg5 = /^abc$/;
判断字符串的字符是否是0~9的数字
// \d 表示匹配一个数字
var reg6 = /^\d$/;
var str6 = "0";
字符串中是否包含两个连续的数字
var reg8 = /\d\d/;
手机号正则表达式1
var phoneReg1 = /^1\d\d\d\d\d\d\d\d\d\d$/;
var tel1 = "18811111111";
console.log(phoneReg1.test(tel1));
判断字符串中的字符是否都是数字(至少一个,不能为空字符串)
// + 表示前边的字符匹配一位或多位
var reg9 = /^\d+$/;
* 表示匹配0位或多位
console.log(/^\d*$/.test(""));
? 表示匹配0位或一位;
console.log(/^\d?$/.test("0"))
{n} 表示匹配n位,{n,m}表示匹配n~m位,{n,} 匹配至少n位
console.log(/^\d{5}$/.test("1345"))
console.log(/^\d{2,7}$/.test("12345"))
console.log(/^\d{5,}$/.test("12345"))
手机号2
var phoneReg2 = /^1\d{10}$/;
console.log(phoneReg2.test("18811111111"));
手机号3,第一位必须是1,第二位只能是35678其中一个,后面9位数字
[ ]表示匹配多个字符中的任何一个
var phoneReg3 = /^1[35678]\d{9}$/
[n-m] 表示匹配unicode编码表中n字符到m字符之间的所有,所以[a-zA-Z] 表示匹配所有英文字母
var reg15 = /^[a-zA-Z]$/;
匹配中文字符
var reg16 = /^[\u4e00-\u9fa5]+$/;
\w 匹配数字字母下划线以及一些标点符号
[a-zA-Z0-9_] 数字字母下划线
. 表示匹配除换行符(\n)以外的任意字符.(很少用)
\D 不是数字(取反)
[^]也是取反
如果需要表示正则表达式中具有特殊语义的符号,例如 + [ ] { } . * ?
则必须使用 \ 进行转译
如判断字符串中是否有三个连续的+
var reg17 = /\+{3}/;
正则表达式搜索
var str = "soabcdfjsdjfabcosABCjojgagohoghtabc";
var reg = /abc/g;
var res;
while(res = reg.exec(str)){
console.log(res);
}
// 正则表达式后添加 g 表示进行全局搜索
// 添加 i 表示忽略大小写