(1)正则表达式是描述字符模式的对象;
例:正则表达式的两种创建方法:
var re = /136[0-9]{8}/;
var re = new RegExp(/136[0-9]{8}/);
(2)书写规则:内容、次数
var exp = /a{3}[0-9]+[a-c]{7}/
(3)test():检测字符串是否为正则表达式,返回true或者false;
console.log(exp.test('1388shjsk'));//false
console.log(re.test(13699999999));//true
(4)exec():检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
(1)原子表
原子 | 说明 |
---|---|
[] | 只匹配其中一个原子 |
[^] | 只匹配除了其中字符的任意原子 |
[0-9] | 匹配0-9任何一个数字 |
[a-z] | 匹配小写a-z任何一个字母 |
[A-Z] | 匹配大写A-Z任何一个字母 |
例外:
\d = [0-9]
(2)元字符:
元字符 | 说明 |
---|---|
\w | 所有的字母、数字、下划线 |
\W | 所有的非数字、字母、下划线 |
\d | 所有的数字 |
\D | 所有的非数字 |
\s | 所有的空白字符、换行、空格等等 |
\S | 所有的非空白字符 |
. | 除换行以外的任意字符 |
(3)模式修饰符:
修饰符 | 说明 |
---|---|
i | 不区分大小写 |
g | 全局匹配 |
y | 从lastIndex开始匹配 |
u | 处理UTF-16编码字符 |
m | 多行处理 |
s | 单行处理,忽略换行符 |
注意:可以单独使用i或g,也可以同时使用;同时使用时,格式可以为ig也可以为gi没有区别。
例:
var s1 = 'wom田JHDIOH们oijios嗯fHus是idoofi我';
var x1 = s1.match(/[a-z]{1,}/ig);
console.log(x1);
//["wom", "JHDIOH", "oijios", "fHus", "idoofi"]
var x2 = s1.match(/[a-z]{1,}/gi);
console.log(x2);
//["wom", "JHDIOH", "oijios", "fHus", "idoofi"]
(4)原子组:使用()包裹
引用分组:引用之前原子组匹配到的内容;
分组别名:为不同分组命名,使用?<>命名,使用$<>引用;
let str = 'abc123.c123'
let reg = /([a-z]\d+)\.\1/g
console.log(str.match(reg));
// ["c123.123"]
let reg1 = /(?[a-z]\d+)\.\1/g
// console.log(str.match(reg));
console.log(str.replace(reg1, `$
`));
//abc123
(5)重复情况:
符号 | 说明 |
---|---|
+ | 重复一次或多次 |
* | 重复零次或多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或多次 |
{n,m} | 重复n次到m次 |
例:
let str = '1234'
let reg = /\d/
let reg2 = /\d+/
let reg3 = /^\d{1,2}$/
(6)字符方法:
方法 | 说明 |
---|---|
search() | 返回要搜索的内容的索引,没有就返回-1 |
match() | 使用字符串或者正则表达式匹配,返回匹配内容,匹配不到就返回null |
matchAll() | 返回一个可迭代对象 |
split() | 使用字符分隔字符串 |
replace() | 替换字符串为新的字符串 |
例:
let str = 'abcdef'
console.log(str.search('ef')); // 4
console.log(str.search(/\w/)); // 0
console.log(str.search('efg')); // -1
console.log(str.match('ef')); // ef
console.log(str.match(/\w+/)); // abcdef
let str1 = 'abc/def/123'
console.log(str1.split('/'));// ["abc","def","123"]
console.log(str1.replace(/\W/g, '-'));// abc-def-123
(7)选择符:
‘|’:左右两边匹配到一个就为true
转义字符:‘\’
例:
let str = '张三:010-1568413,李四:020-1586640'
let reg = /(010|020)\-\d{7,8}/
console.log(reg.test(str)); // true
(8)边界:以^开始,以$结束,可用于检测网址开头和文件后缀
例:
let str = 'http:www.easyremember.cn'
let reg = /^https?:www\..+/
console.log(reg.test(str)); // true
let str1 = 'C://Users/All Users/abc.txt'
let str2 = 'C://Users/All Users/abc.log'
let reg1 = /\.txt$/
console.log(reg1.test(str1)); // true
console.log(reg1.test(str2)); // false
(9)常用的正则表达式:
//用户名正则,4到16位(字母,数字,下划线,减号)
var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;
//输出 true
console.log(uPattern.test("iFat3"));
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;
//输出 true
console.log("==" + pPattern.test("iFat3#"));
//正整数正则
var posPattern = /^\d+$/;
//负整数正则
var negPattern = /^-\d+$/;
//整数正则
var intPattern = /^-?\d+$/;
//输出 true
console.log(posPattern.test("42"));
//输出 true
console.log(negPattern.test("-42"));
//输出 true
console.log(intPattern.test("-42"));
//正数正则
var posPattern = /^\d*\.?\d+$/;
//负数正则
var negPattern = /^-\d*\.?\d+$/;
//数字正则
var numPattern = /^-?\d*\.?\d+$/;
console.log(posPattern.test("42.2"));
console.log(negPattern.test("-42.2"));
console.log(numPattern.test("-42.2"));
var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
//输出 true
console.log(ePattern.test("[email protected]"));
var mPattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
//输出 true
console.log(mPattern.test("18600000000"));
var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
//输出 true
console.log(cP.test("11010519880605371X"));
var urlP = /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
//输出 true
console.log(urlP.test("http://42du.cn"));
var ipP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
//输出 true
console.log(ipP.test("115.28.47.26"));
var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
//输出 true
console.log(cPattern.test("#b8b8b8"));```
- 10)日期:简单判定,未做月份及日期的判定
```javascript
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//输出 true
console.log(dP1.test("2017-05-11"));
//输出 true
console.log(dP1.test("2017-15-11"));
//日期正则,复杂判定
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));
var qqPattern = /^[1-9][0-9]{4,10}$/;
//输出 true
console.log(qqPattern.test("65974040"));
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
//输出 true
console.log(wxPattern.test("RuilongMao"));
var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
//输出 true
console.log(cPattern.test("京K39006"));
var cnPattern = /[\u4E00-\u9FA5]/;
//输出 true
console.log(cnPattern.test("42度"));
(10)综合运用
例:取出运算式字符串中的数字组成数组:
var m = '12+23+45-2*5=70';
//取出m中的数字
var n = m.split(/[\+\-\*\/=]/);
console.log(n);//["12", "23", "45", "2", "5", "70"]