共计 2081 个字符,预计需要花费 6 分钟才能阅读完成。
正则表达式简介
- 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式
- 在 JavaScript 中,正则表达式也是对象
- 通常用来查找、替换哪些符合正则表达式的文本,许多语言都支持正则表达式
使用场景
- 例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框可以输入中文(匹配)
- 比如用户名:
/^[A-Za-z0-9_-]{3,16}$/
- 过滤掉页面内容的一些敏感词(替换),或从字符串中获取我们想要的特点部分(提取)等
正则表达式语法
定义正则表达式:
// 通过调用 RegExp 对象的构造函数创建
let 变量名 = new RegExp(/表达式/)
// 是正则表达式的字面量
let 变量名 = /表达式/
判断是否有符合规则的字符串:
test()
方法用来查看正则表达式与指定的字符串是否匹配
变量名.test(被检测的字符串)
regexObj.text(str)
// regexObj:是写到正则表达式
// str:是要测试的文本
如果正则表达式与指定的字符串匹配,返回
true
,否则false
检索(查找)复合规范的字符串:
exec()
方法在一个指定字符串中执行一个搜索匹配
变量名.exec(被检测的字符串)
如果匹配成功,
exec()
方法返回一个数组,否则返回null
元字符
边界符(表示位置,开头的结尾,必须用什么开头,用什么结尾)
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
边界符 | 说明 |
---|---|
^ |
表示匹配行首的文本(以谁开始) |
$ |
表示匹配行尾的文本(以谁结束) |
如果
^
和$
在一起,表示必须是精确匹配
量词(表示重复次数)
量词用来设定某个模式出现的次数
量词 | 说明 |
---|---|
* |
重复零次或多次 |
+ |
重复一次或多次 |
? |
重复零次或一次 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m次 |
逗号左右两侧千万不要出现空格
字符类
1.[ ]
匹配字符集合
使用连字符 -
表示一个范围
[a-z]
表示 a到z 26个英文字母都可以[a-zA-Z]
表示26个英文字母大小写都可以[0-9]
表示 0~9 的数字都可以
[ ]
里面加上^
取反符号 要写到中括号里面
[^a-z]
匹配除了小写字母以外的字符
.
匹配除换行符之外的任何单个字符
预定类 | 说明 |
---|---|
\d |
匹配 0-9 之间的任一数字,相当于 [0-9] |
\D |
匹配所以 0-9 以外的字符,相当于 [^0-9] |
\w |
匹配任意的字母、数字和下划线,相当于 [a-zA-Z0-9_] |
\W |
除所以字母、数字和下划线,相当于 [^a-zA-Z0-9_] |
\s |
匹配空格(包括换行符、制表符、空格等),相当于 [\t\r\n\v\f] |
\S |
匹配非空格的字符,相当于 [^\t\r\n\v\f] |
日期格式:^\d{4}-\d{1,2}-\d{1,2}
修饰符
修饰符约束正则执行的某些细节行为,如:区分大小写、是否支持多行匹配等
/表达式/[switch]
switch
(也称修饰符)按照什么样的模式来匹配,有三种值:
g
:全局匹配 是单词global的缩写,匹配所有满足正则表达式的结果i
:忽略大小写 是单词ignore的缩写,正则匹配时字母不区分大小写gi
:全局匹配 + 忽略大小写
console.log(/a/i.test('a')) //true
console.log(/a/i.test('A')) //true
替换 replace
reeplace()
方法可以实现替换字符串操作,用来替换的参数可以是一个字符或者是一个正则表达式
stringObject.replace(regexp/substr, replacement)
字符串.replace(/正则表达式/,'替换的文本')
// 全局匹配替换
字符串.replace(/正则表达式/g,'替换的文本')
// 全局匹配替换,多个
字符串.replace(/正则表达式|正则表达式/g,'替换的文本')
regexp/substr
:被替换的字符串或者正则表达式replacement
:替换为的字符- 返回值:是一个替换完毕的新字符串
中文用户名正则
/^[\u4e00-\u9fa5]{2,8}$/
总结
实例 | 描述 |
---|---|
[Pp]thon |
匹配 “Python” 或 “python” |
rub[ye] |
匹配 “ruby” 或 “rube” |
[abcdef] |
匹配中括号内的任意一个字母 |
[0-9] |
匹配任何数字。类似于 [0123456789] |
[a-z] |
匹配任何小写字母 |
[A-Z] |
匹配任何大写字母 |
[a-zA-Z0-9] |
匹配任何字母及数字 |
[^au] |
除了 au 字母以外的所有字符 |
[^0-9] |
匹配除了 数字 外的字符 |
实例 | 描述 |
---|---|
. |
匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 [.\n] 的模式 |
? |
匹配一个字符 零次 或 一次,另一个作用是非贪婪模式 |
+ |
匹配 一次 或 多次 |
* |
匹配 零次 或 多次 |
\b |
匹配一个长度为 0 的子串 |
\d |
匹配一个数字字符。等价于 [0-9] |
\D |
匹配一个非数字字符。等价于 [^0-9] |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v] |
\S |
匹配任何非空白字符。等价于 [^\f\n\r\t\v] |
\w |
匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_] |
\W |
匹配任何非单词字符。等价于 [^A-Za-z0-9_] |
正文完
发表至: 笔记
2024-05-20