正则表达式

正则表达式在网络上有很多资料和工具,用的时候直接在网上搜即可

1. 声明和使用

1.1 通过构造函数定义

var 变量名= new RegExp(/表达式/);

1.2 通过直接量定义(简单方便,我们一般用这个)

var 变量名= /表达式/;

1.3 常用方法,可用于检测传入的字符串是否符合该规则并返回布尔值

exp.test("要检测的字符串")

2. 修饰符

修饰符 描述
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
i 执行对大小写不敏感的匹配
m 执行多行匹配

3. 字符类

元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单词字符
\W 查找非单词字符
\d 查找数字
\D 查找非数字字符
\s 查找空白字符
\S 查找非空白字符
\b 匹配单词边界
\B 匹配非单词边界
\0 查找 NULL 字符
\n 查找换行符
\f 查找换页符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符
\xxx 查找以八进制数 xxx 规定的字符

4. 边界 量词 括号

4.1. 边界

边界 描述
^ ^只有在[]内才表示非 在外边表示开始 会匹配行或者字符串的起始位置 ^只有在[]内才表示非 在外边表示开始
$ 匹配一个字符串的结尾,比如 (b$) 就是匹配以字母b结尾的字符串
^$ ^$在一起 表示必须是这个(精确匹配)

4.2. 量词

量词 描述
“*” 重复零次或更多 x>=0
“+” 重复一次或更多次 x>=1
“?” 重复零次或一次 x=(0
{n} n次
{n,} 重复n次或更多 x>=n
{n,m} 重复出现的次数比n多但比m少 n<=x<=m

4.3. 括号

4.3.1. 方括号

方括号 描述
简单类[abc] 查找方括号之间的任何字符
负向类[^abc] 查找任何不在方括号之间的字符
范围类[a-z]或[0-9] 表示该位置可以出现的字符的范围
组合类[a-zA-Z0-9] 范围类的组合

4.3.2. () [] {} 的区别

括号 描述
() 表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串
[] 定义匹配的字符范围 比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字
{} 表示匹配的长度 比如 \d{3} 表示匹配三个数字,\d{1,3} 表示匹配1~3个数字,\d{3,} 表示匹配3个以上数字

| 或运算符

'qabcpqcbap'.replace(/q(abc|cba)p/g, 'X') 	XX

**分组

分组成$1,$2,$3…**

'2019-04-28'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')		"04/28/2019"

忽略分组 在()内加上 ?:即可

'2019-04-28'.replace(/(\d{4})-(?:\d{2})-(\d{2})/g,'$2/$1')		"28/2019"

零宽断言

IOS,MAC不支持零宽断言

正则零宽断言,一共4种
1、(?=xxx) 例:\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分
2、(?<=xxx) 例:(?<=\bre)\w+\b会匹配以re开头的单词的后半部分
3、(?!xxx) 例:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字
4、(?<!xxx) 例:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字
————————————————
版权声明:本文为CSDN博主「孙三苗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010377516/article/details/122327460

5. 常见项目的匹配

常见项目的匹配网上有很多(例如搜索常用正则表达式大全),无需记忆,能看懂即可

  1. 匹配国内电话号码:
/^0\d{2,3}-\d{7,8}$/
  1. 匹配姓名:
/^[\u4e00-\u9fa5]{2,}$/
  1. 匹配腾讯QQ号:
/^[1-9]\d{4,10}$/
  1. 匹配手机号:
/^1[3456789]\d{9}$/
  1. 匹配邮箱:
/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

6. RegExp 对象方法

方法 描述
exec 检索字符串中指定的值。返回找到的值,并确定其位置
test 检索字符串中指定的值。返回 true 或 false
toString 返回正则表达式的字符串

7. 支持正则表达式的 String 对象的方法

方法 描述
search 检索与正则表达式相匹配的值
match 找到一个或多个正则表达式的匹配
replace 替换与正则表达式匹配的子串
split 把字符串分割为字符串数组

8. 封装自己的trim方法

封装自己的trim()方法

    function trim(str) {
        return str.replace(/^\s+/,"").replace(/\s+$/,"");
}
    function trim(str) {
        return str.replace(/^\s+|\s+$/,"");
    }

使用trim()方法检测用户输入