正则表达式
定义:正则,就是某种规则、要求
正则属性:设置条件,如:是匹配一个还是匹配多个
创建正则的两种方法:
1、直接量/字面量,g代表多次匹配,就是匹配到所有符合条件的
/这里写自己要查找的内容/,如下: /flower/
var reg1 = /flower/g;
2、对象
var reg2 = new RegExp("flower","");
var str = "hello i'm like flower,she is cui flower";
str.match(reg1);
console.log(str.match(reg1));
备注: 字符串的replace支持正则,/g可以替换所有的flower
console.log(str.replace(reg1,"hua"));
正则中的元字符:
\d 代表的是数字,两个 \d 就代表匹配两个连续的数字
var reg3 = /\d\d/g;
var str3 = "hk45m65j[]=-424.7Dadsj,."
str3.match(reg3);
console.log(str3.match(reg3));//结果为:["45","65","42"]
\w 单词字符 数字 字母 下划线
var reg4 = /\w/g;
var str4 = "hk45m65j[]=-424.7Dads_j,."
str4.match(reg4);
console.log(str4.match(reg4));
\s 匹配空白字符(包括空格、换行符、\t)
var reg5 = /\s/g;
var str5 = "hk55m\n65j []=-525.7Dads_j,.\t"
str5.match(reg5);
console.log(str5.match(reg5));
\n 代表的就是换行符
var reg6 = /\n/g;
var str6 = "hk66m\n66j []=-626.7Dads_j,.\t"
str6.match(reg6);
console.log(str6.match(reg6));
. 查找单个字符,除了换行符
var reg7 = /./g;
var str7 = "hk77m\n77j []=-727.7Dads_j,.\t哈哈\0"
str7.match(reg7);
console.log(str7.match(reg7));
\b 匹配单词边界(单词分割的地方),找到的就是单独的\b包裹的单词,所以找到的结果为空
// var reg8 = /\bbox\b/g;查找box这个单词
// var reg8 = /\bbox/g;以box开头的单词
// var reg8 = /box\b/g;以box结尾的单词
var reg8 = /\bbox\b/g;
var str8 = "item bigbox red";
str8.match(reg8);
console.log(str8.match(reg8));
\u 匹配汉字
var reg9 = /[\u4e00-\u9fa5]/g;
var str9 = "item bigbox red 哈哈哈哈kkK hah 哈辉"
str9.match(reg9);
console.log(str9.match(reg9));
量词
// 如果符合条件,尽可能向数量多的去匹配
// n+ 匹配至少包含一个n的字符
var reg10 = /5+/g;
var str10 = "sdfj555njkh784564hjk453oj4"
str10.match(reg10);
console.log(str10.match(reg10));
// n* 匹配包含零个或多个n的字符
var reg11 = /5*/g;
var str11 = "sdfj555njkh784564hjk453oj4"
str11.match(reg11);
console.log(str11.match(reg11));
// n? 匹配包含零个或一个n的字符
var reg12 = /5?/g;
var str12 = "sdfj555njkh784564hjk453oj4"
str12.match(reg12);
console.log(str12.match(reg12));
// n{x} x个n
var reg13 = /5{2}/g;
var str13 = "sdfj555njkh784564hjk453oj4"
str13.match(reg13);
console.log(str13.match(reg13));
// n{x,y} x到y个n,至少x个,至多y个,x必须<=y
var reg14 = /5{1,3}/g;
var str14 = "sdfj555njkh784564hjk453oj4"
str14.match(reg14);
console.log(str14.match(reg14));
// ^x 作为字符串开头的x
// x$ 作为字符串结尾的x
// [123],可以是1或2或3的任意单个字符
// [^123],匹配除了123以外的任意字符
// [1-5],代表1到5之间的任意数字
// 结果为:["1", "3", "2", "1", "3", "2", "1", "2", "3"]
var reg15 = /[^123]/g;
var str15 = "4657984651321321230456";
str15.match(reg15);
console.log(str15.match(reg15));
// 匹配
// 匹配有特殊含义的字符的时候要加反斜杠
// 括号代表一个整体,占一位,"|"代表或者,这里找到3或者5
var reg16 = /(3|5)/g;
var str16 = "qwqe]13456489";
str16.match(reg16);
console.log(str16.match(reg16));
练习: 手机号码
// 11位,纯数字,1开头
// 没有12……
var reg17 = /^1[13-9]\d{9}$/g;//以11位数开头,11位数结尾
// var reg17 = /^1(3[0-35-9]|5[49])\d{8}$/g;
var str17 = "18888888888";
str17.match(reg17);
console.log(str17.match(reg17));
// 正则调用test方法,而不是字符串调用
console.log(reg17.test(str17));
练习: 邮箱的正则
// 必须6-18位,必须有至少各有一个大写字母、小写字母、数字的组合
var str18 = "12345Aa,";
function t(str) {
var rega = /^[\w\.\?\*,]{6,18}$/g.test(str);
var x = str.search(/[a-z]/);
var y = str.search(/[A-Z]/);
var z = str.search(/[0-9]/);
return rega && (x !=-1)&&(y!=-1)&&(z!=-1);
}
console.log(t(str18));