正则表达式重学—基础知识

这是我参与更文挑战的第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);
}
  
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享