这是我参与更文挑战的第25天,活动详情查看: 更文挑战
1,什么是正则表达式
正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规
则去匹配符合规则的字符。
复制代码
2,正则语法
/正则表达式主体/修饰符
var experssion = / pattern / flags
复制代码
3,常用方法
- search()
- replace()
- match()
- test()
- exec()
-
search() 方法:
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
返回值: stringObject 中第一个与 regexp 相匹配的子串的起始位置。
注释:如果没有找到任何匹配的子串,则返回 -1。
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字
符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。 -
match()方法:
可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似
indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
字符串对象的match方法与正则对象的exec方法比较类似:
但是如果正则表达式带有g修饰符,那么match方法与exec方法就有差别了:
可以看到match返回了所有成功匹配的结果,但是exec方法只返回了一个。 -
replace() 方法:
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
返回值:一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与
regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,
那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。 -
test()方法:
用法:regexp对象实例.test(字符串)
返回值:如果满足regexp对象实例中定的正则规则,返回true,否则返回false -
exec()方法:
用法:regexp对象实例.exec(字符串)
返回值:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新 全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现 的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。 -
split()方法:
用法:string对象.split([分割符(可以是字符串或正则表达式[,限制输出数组个数]])
返回值:返回string对象被分割的数组
注意:string对象不会被split方法修改。分割符是可选项,可以是字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组.最后一个选项限制输出数组个数也是可选项,该值用来限制返回数组中的元素个数。
4,正则表达式模式
- \b 匹配单词的开始或者结束
- [abc] 查找方括号的任何字符
- [0-9] 查找任何从0-9的数字
- (x|y) 查找任何以|分割的选项
- \d 查找数字
- \s 查找空白字符
- \uxxx 查找以十六进制xxx规定的Unicode字符
- n+ 至少包含一个
- n* 0个或者多个
- n? 0个或者一个
\t: 水平制表符
\v:垂直制表符
\n:换行符
\r:回车符
\0:空字符
\f:换页符
复制代码
5,常用点
项目 | 作用 |
---|---|
\w | 指包含大,小写字母数字和下划线 ,相当于 [a-zA-Z0-9_] |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\b | 匹配单词的开始或者结束 |
在JavaScript中RegExp是正则对象,预定义了很多正则属性和方法
test() : **检测一个字符串是否匹配某个模式,如果含有,返回true, 否则返回false**
exec() : **返回一个数组,存放匹配的结果,如果没有找到匹配,返回null**
match(): **匹配的结果,以数组形式返回**
复制代码
更详细的学习正则地址
-想要查看更详细的语法说明,可以参考JavaScript正则表达式知识拓展总结正则表达式知识拓展总结
-常用正则转换和使用的在线工具 正则在线必备
/* 提取浏览器 url 中的参数名和参数值,生成一个key/value 的对象。 */
function getUrlParamObj() {
var obj = {}
var params = window.location.search.substr(1)
//[^&=]+ 表示不含&或=的连续字符,加上()就是提取对应字符串
params.replace(/([^&=]+)=([^&=]*)/gi, function(rs, $1, $2){
obj[$1] = decodeURIComponent($2);
});
return obj
}
复制代码
6,实战
/* 是否带有小数 */
function isDecimal(str) {
const objExp = /^\d+\.\d+$/
return objExp.test(str)
}
/* 检查是否中文名称组成*/
function isChina(str){
const patt = /^[\u4E00-\u9FA5]{2,4}$/
return patt.test(str)
}
function isValid(str) {
var 全部字母 = /^[a-zA-Z]+$/
var 全部数字 = /^\d+$/
var 字母数字下划线 = /^\w+$/
}
/* 校验是否全由8位数字组成*/
const a = /^[0-9]{8}$/
/* 检验手机号码格式 两种方法 (以1开头,第二位可能是3,4,5,7,8,再加上9位数字)*/
const phone = /^1[34578]\d{9}$/
const tele = /^1(3|4|5|7|8)\d{9}$/
/* 检验固定电话号码(中国电话号码,包括移动和固定电话) */
function checkTel(str) {
const tel = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
return tel.test(str)
}
/* 身份证正则 */
const IDCard1 = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/
function isEmail(str) {
const email = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/
return email.test(str)
}
/* 将手机号 12988886666 转化成 129****6666 */
function telFormat(tel) {
tel = String(tel)
return tel.replace(/(\d{3})(\d{4})(\d{4})/, '$1****$3')
}
/* 提取浏览器 url 中的参数名和参数值,生成一个key/value 的对象。 */
function getUrlParamObj() {
var obj = {}
var params = window.location.search.substr(1)
//[^&=]+ 表示不含&或=的连续字符,加上()就是提取对应字符串
params.replace(/([^&=]+)=([^&=]*)/gi, function(rs, $1, $2){
obj[$1] = decodeURIComponent($2);
});
return obj
}
/*校验是否全由8位数字组成 */
function isStudentNo(str) {
var reg=/^[0-9]{8}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
/*校验电话码格式 */
function isTelCode(str) {
var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
return reg.test(str);
}
复制代码