我的博客:xiaolan1.icu
一、正则表达式语法
1.修饰符
i 对大小写不敏感
g 全局匹配,匹配出多组数据构成一个一维数组
m 多行匹配
? 匹配0个或1个
+ 匹配一个或多个
* 匹配0个或多个
2.模式
①元字符(常用)
\d 匹配数字
\D 匹配非数字
\s 匹配空白字符和换号
\S 匹配非空白
\w 匹配字母数字下划线
\W 匹配除了字母数字下划线
. 匹配除了换行以外的任意字符
[\s\S] 匹配所有字符
[\d\D] 匹配所有字符
②表达式
[asd] 查找方括号之间任何字符,可看做 a||s||d
[0-9] 查找0-9任何数字
(123|asd) 查找括号中满足的一组数 ,可看做 123||asd
{1,3} 查找满足的个数为1-3个
二、演示
1、字面量创建(常用)
let s='xiaolan123'
let a='lan'
console.log(eval(`/${a}/`).test(s)) // true
2、对象方式创建
let reg=new RegExp('lan')
console.log(reg) // /lan/
let s='xiaolan123'
console.log(reg.test(s)) // true
3、选择符 | 的使用
let tel='010-12345678'
console.log(/(010|020)\-\d{7,8}/.test(tel)) //true
//(010|020)表示010||020, \-表示- (\为转义字符),\d{7,8}表示满足数字7-8个
4、原子组 ()的使用
console.log('asd123456'.match(/(12|34)/g)) //['12','34']
5、转义 \ 的使用
let url='http://xiaolan1.icu'
console.log(/http:\/\/\w+\.\w+/.test(url)) // true
// \/转义为/ \.转义为.
6、字符边界符 ^ $ 的使用
let url='http://xiaolan1.icu'
console.log(/^(http:)\/\/\w+.(\w+)$/.test(url)) //true
//^(http:)表示匹配以http:开头,(\w+)$表示以1个或多个字母符号下划线结尾
7、[^]的使用
let url='http://xiaolan1.icu'
console.log(url.match(/[^:\/\.]+/g)) //['http','xiaolan1','icu']
//[^:\/.]表示不匹配: / .
8、点字符的使用
let url='http://xiao\nlan1.icu'
console.log(url.match(/.+/g)) //['http://xiao', 'lan1.icu']
9、m 多行匹配的使用
let url=`
#1 xiaolan1.icu #
#2 baidu.com #
`
console.log(url.match(/^\s.+/g)) //['\n #1 xiaolan1.icu #']
console.log(url.match(/^\s.+/mg)) //['\n #1 xiaolan1.icu #', ' #2 baidu.com #']
10、原子表 []的使用
let time= '2021-09/28'
console.log(time.match(/^\d{4}[-\/]\d{2}[-\/]\d{2}$/)) //['2021-09/28']
11、嵌套分组与不记录分组
let url=`
https://www.baidu.com
http://xiaolan1.icu
`
let reg=/https?:\/\/((w+\.)?\w+\.(?:com|org|cn))/i
console.log(url.match(reg)) //["https://www.baidu.com", "www.baidu.com", "www."]
//第一个元素是整体匹配的结果,第二个元素是((w+\.)?\w+\.(?:com|org|cn))匹配的结果,第三个括号是 (w+\.),因为括号(?:com|org|cn)中有?: 所以不记录该分组
12、禁止贪婪 (意思为内容尽可能少)
let url = 'xiaolan1.icu'
console.log(url.match(/xiao\w+?/)) //['xiaol'] 表示\w+只匹配一个字母符号下划线
console.log(url.match(/xiao\w*?/)) //['xiao'] 表示\w*只匹配0个字母符号下划线
console.log(url.match(/xiao\w{2,4}?/)) //['xiaola'] 表示\w{2,4}只匹配2个字母符号下划线
13、matchAll全局匹配的使用
let url = 'www.xiaolan1.icu.123456'
let reg = /\w+\./gi
let result = url.matchAll(reg)
let arr = []
for (i of result){
console.log(i); //依次打印出 ['www.'] ['xiaolan1.'] ['icu.']
arr.push(i[0])
}
console.log(arr); //["www.", "xiaolan1.", "icu."]
14、serach方法的使用
let url = 'xiaolan1.icu'
console.log(url.search(/l/)); //4
console.log(url.search(/\d.\w+/)); //7
//从0开始打印出匹配出元素的首个位置
15、$&的使用
let url = 'xiaolan1.icu'
url.replace(/\w+./,`$&`)
console.log(url) // xiaolan.icu
//$&为匹配元素自身
三、常用的正则匹配示例
参考网站:http://tools.jb51.net/regex/create_reg/
1、手机号码(国内)
/0?(13|14|15|18)[0-9]{9}/
2、中文字符
/[\u4e00-\u9fa5]/
3、邮箱判断
/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/
4、网址判断
/^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/
5、身份证号(15位或18位)
/\d{17}[\d|x]|\d{15}/