学习正则表达式

正则表达式

正则表达式对象

在JavaScript中,正则表达式的对象创建方式有两种,

  • 第一种是通过构造函数RegExp(**pattern: string | RegExp**, flags?: string): RegExp来完成
  • 第二种是使用正则表达式字面量/ /修饰符这种方式去完成
var re = new RegExp("ab+c");
//或
var re = /ab+c/;

上面两种方式创建的正则表达式对象是相同的

匹配规则

​ 正则表达式是通过特殊的规则来对字符串进行提取,匹配,验证等操作,在匹配的过程当中它有一系列的规则

一元符

元字符 对应说明
. 匹配除换行符之外的任意字符
\w 匹配字母数字下划线,等同于:[a-zA-Z0-9_]
\s 匹配任意空白符
\d 匹配数字,等同于[0-9]
\b 匹配单词边界
| 或匹配,如 /x|y/ 正则可匹配x或y两个字符
^ 用在[]中,表示非;用在正则式首位,表示以它之后的第一个字符开头
$ 匹配字符串的结束

反义字符

反义字符 对应说明
[^x] 匹配除“x”之外的所有字符,其中“x”可以为任意字符
[^xyz] 同上,匹配除“x、y、z”之外的任意字符
\W 匹配除了字母、数字、下划线之外的所有字符,等同于:[^\w]
\S 匹配除空白符之外的任意字符,等同于:[^\s]
\B 匹配不是单词边界的字符,等同于:[^\b]
\D 匹配不是数字的所有字符,等同于:[^\d]

转义字符

转义字符 对应说明
\xnn 匹配十六进制数
\f 匹配换页符,等同于:\x0c
\n 匹配换行符,等同于:\x0a
\r 匹配回车符,等同于:\x0d
\t 匹配水平制表符,等同于:\x09
\v 匹配垂直制表符,等同于:\x0b
\unnnn 匹配Unicode字符,如:\u00A0

重复匹配

匹配字符 对应说明
* 等价于{0,} ,重复出现零次或多次
+ 等价于{1,},重复出现一次或多次
等价于{0,1},重复出现零次或一次
重复出现n次
至少重复出现n次
重复重现m到n次,其中,m<n

分组/捕获

分组字符 对应说明
(exp) 用小圆括号进行分组,如日期中年月日的分组:/(\d{5})-(\d{1,2})-(\d{1,2})/ 每个分组将产生分组号,从第一个括号开始,可以使用\n的形式在正则中使用分组号, 如匹配成对出现的HTML标签,可以写成:/<(\w+)></\1>/
(?:exp) 匹配exp正则,但不产生分组号
(?<!exp2) exp1 后顾,匹配exp1,但后面不是exp2 如匹配名字叫xianlie,但不姓zhao的人:/(?<!zhao)xianlie/
exp1(?!=exp2) 后瞻断言,匹配exp1,但后面不能是exp2 如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/

贪婪与惰性

相关字符 对应说明
*? 重复任意次,但尽可能少的重复
+? 重复一次或多次,但尽可能少的重复
?? 重复零次或一次,但尽可能少的重复
{m,n}? 重复m到n次,但尽可能少的重复
{n,}? 重复n次以上,但尽可能少的重复
? 重复n次,但尽可能少的重复

修饰符

修饰符 对应说明
i ignoreCase的缩写,表示忽略字母的大小写
m multiline的缩写,更改^和使(,的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
g global的缩写,进行全局匹配,即对字符串进行全文匹配,直到字符串遍历结束

正则表达式的使用

正则表达式可以被用于 RegExpexectest 方法以及 Stringmatchreplacesearchsplit 方法。

使用正则表达式的方法

方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。
matchAll 一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。

常见正则表达式案例

正则表达式表单验证实例

/*是否带有小数*/
function    isDecimal(strValue )  {  
   var  objRegExp= /^\d+\.\d+$/;
   return  objRegExp.test(strValue);  
}  

/*校验是否中文名称组成 */
function ischina(str) {
    var reg=/^[\u4E00-\u9FA5]{2,4}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}

/*校验是否全由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);
}

/*校验邮件地址是否合法 */
function IsEmail(str) {
    var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
    return reg.test(str);
}
posted @   花哈  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
欢迎阅读『学习正则表达式』
点击右上角即可分享
微信分享提示