做一些校验,正则表达式是必不可少的,下面是我的正则表达式学习的一些记录笔记。
一些语法:
// js正则表达式用 / / 包围起来
// 需要转义(\)的字符:. * \ / ? [] {} |
// 匹配说明
// \d(数字) \f \n \r \t \v \w(字母 数字 下划线) \s(任意空白字符,空格 制表符 换页符 换行符 回车等)
// \D(非数字) \W \S(非空白字符)
// a|b 匹配a,b,ab,ba
// [ab] 匹配a,b
// [a-z] 匹配a-z(小写字母)
// [^ab] 匹配除a,b外的任意
// [^a-z] 匹配不是小写字母
// ? 匹配0或者1次,/ab?/ 匹配a和ab
// * 匹配0次或n次,尽可能多的匹配
// + 匹配1次以上,尽可能多的匹配
// {n} 匹配n次,比如/a{2}/ 匹配aa
// {n,} 匹配n次以上, /a{2,}/ 匹配aa aaaa等
// {n,m} 匹配n到m次, /a{1,2}/ 匹配a aa; 要求n<m
/ 判断是否为普通手机号
var isPhone = /^1[3456789]\d{9}$/
var str = 19927535450
document.write('是否为手机号:',isPhone.test(str))
- 输出结果:是否为手机号:true
// 定位符:边界符,字符串首位的地方
// ^ 匹配最开始的位置,$匹配结尾的位置,\b 匹配单词的首位边界,连续的0~9,a-z,A-Z被认为是完整的单词
// 修饰符:在双斜线外对表达式的补充标识 /ab/i:表示不区分大小写
// g 全局匹配,表示只要匹配的都返回来。如,ab,/\w/返回的仅仅是a,/\w/g,返回的是ab
// m 多行匹配,匹配所有行首和行尾
// u Unicode模式,将匹配模式当作Unicode序列
// y 仅匹配字符串中满足正则表达式的lastIndex属性指示的索引
// 一些常用函数
// regexp.exec(str):执行一次表达式匹配,返回字符串数组结果,没有结果就null.
// regexp.test(str):执行一次表达式匹配,str子串被包含返回true,否则false
// str.match(regexp):执行一次表达式匹配,返回字符串数组结果,没有结果就null.
// str.replace(regexp,newStr):字符串使用正则表达式查找子字符串,并进行替换。成功则返回新字符串,没有满足匹配的字符串则返回原来字符串。
// str.search(regexp):搜索满足匹配的字符串,返回首次匹配的子字符串索引,没有匹配的子字符串则返回-1.
// str.split(regexp): 根据正则表达式返回分割的字符串列表。
document.write('<hr>')
var str = 'hello 2021-8-18 I am waiting for you.'
var regNumber = /\d+/
document.write('<br>---str---',str)
document.write('<br>---regexp---',regNumber.toString())
document.write('<hr>')
document.write('<br>---regexp.exec(str)---',regNumber.exec(str))
document.write('<br>---regexp.test(str)---',regNumber.test(str))
document.write('<br>---str.match(regexp)---',str.match(regNumber))
document.write('<br>---str.replace(regexp,newStr)---',str.replace(regNumber,'2022'))
document.write('<br>---str.search(regexp)---',str.search(regNumber))
var regWord = /\s+/
document.write('<br>---regWord---',regWord.toString())
document.write('<br>---str.split(regWord)---',str.split(regWord))
输出的结果:
—str—hello 2021-8-18 I am waiting for you.
—regexp—/\d+/
—regexp.exec(str)—2021
—regexp.test(str)—true
—str.match(regexp)—2021
—str.replace(regexp,newStr)—hello 2022-8-18 I am waiting for you.
—str.search(regexp)—6
—regWord—/\s+/
—str.split(regWord)—hello,2021-8-18,I,am,waiting,for,you.