js 正则表达式 RegExp 对象

目录

前言

一、正则表达式

二、正则元字符

1、修饰符

2、特殊单字符

3、空白符

4、量词

5、范围

6、断言

7、转义

8、进制

9、其他元字符

二、RegExp 对象的属性和方法

1、属性

2、方法

三、支持正则表达式的 String 对象的方法 

四、创建一个正则表达式

五、常用正则表达式大全

六、推荐学习正则资源


前言

如果你有一个问题,你想到可以用正则来解决,那么你有两个问题了。

一旦学会了正则表达式之后,务必要保持克制 。那到底该怎么“克制”呢?我的经验有以下三点。

  • 能用普通字符串处理的,坚决⽤普通字符串处理。
  • 能写注释的正则表达式,⼀定要写注释。
  • 能用多个简单正则表达式解决的,⼀定不要苛求用一个复杂的正则表达式。

正则表达式使用基本样式示例:/^[0-9a-zA-Z_-]{3,15}$/g

这个正则表达式的含义是:

  • ^:匹配字符串的开头。
  • [0-9a-zA-Z_-]:匹配数字、字母、下划线(_)和短横线(-)。这是一个字符类,表示匹配任意一个数字、字母、下划线(_)和短横线(-)。
  • {3,15}:表示前面的字符类必须连续出现3~15次。
  • $:匹配字符串的结尾。

【注意】使用 ^$ 锚定符可以帮助你精确地匹配特定位置的字符串,这对于校验和提取特定格式的数据非常有用。

JavaScript 里的 RegExp 类型

ES6 新增正则特性

一、正则表达式

正则常见的三种功能:

  • 校验数据的有效性;
  • 查找符合要求的文本;
  • 对文本进行切割和替换等操作。 

正则的贪婪与非贪婪模式

  • 贪婪匹配:在正则中,表示次数的量词默认是贪婪的,在贪婪模式下,会尝试尽可能最大长度去匹配。会发生回溯。
  • 非贪婪匹配:在贪婪匹配的基础上,在其量词后面加上英文的问号 (?),就变成了非贪婪匹配。非贪婪模式下,会尝试尽可能短地去匹配。会发生回溯。
  • 独占模式:独占模式类似贪婪匹配,但匹配过程不会发生回溯。在一些场景下,不需要回溯,匹配不上返回失败就好了,因此性能会更好。

分组与引用

  • 正则中用括号分组,每个分组都有自己的编号,从左边数,第几个括号就是第几个编号。
  • 大部分情况下,我们就可以使用 “反斜扛 + 编号”,即 \number 的方式来进行引用,而 JavaScript 中是通过$编号来引用,如$1。

匹配模式

  • 不区分大小写模式
  • 点号通配模式
  • 多行匹配模式
  • 注释模式

二、正则元字符

1、修饰符

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

2、特殊单字符

3、空白符

注意:大部分场景使用 \s 就可以满足需求,\s 代表任意单个空白符号。

4、量词

量词描述
*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
+

匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

?

匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。

?=匹配任何其后紧接着指定的字符串。
?!匹配任何其后没有紧接着指定的字符串。
{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

5、范围

元字符描述
[xyz]

字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^xyz]

负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'、'l'、'i'、'n'。

[a-z]

字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

x|y

匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

6、断言

断言包括:

  • 单词边界;
  • 行的开始和结束;
  • 环视。

7、转义

8、进制

元字符描述
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

9、其他元字符

元字符描述
\b

匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B

匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

\cx

匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

\d

匹配一个数字字符。等价于 [0-9]。

\D

匹配一个非数字字符。等价于 [^0-9]。

\f

匹配一个换页符。等价于 \x0c 和 \cL。

\n

匹配一个换行符。等价于 \x0a 和 \cJ。

\r

匹配一个回车符。等价于 \x0d 和 \cM。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S

匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t

匹配一个制表符。等价于 \x09 和 \cI。

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w

匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。

\W

匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。

\xn

匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。

\num

匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

\n

标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

\nm

标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

\nml

如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

\un

匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

二、RegExp 对象的属性和方法

1、属性

属性描述
constructor返回一个函数,该函数是一个创建 RegExp 对象的原型。
global判断是否设置了 "g" 修饰符
ignoreCase判断是否设置了 "i" 修饰符
lastIndex用于规定下次匹配的起始位置
multiline判断是否设置了 "m" 修饰符
source返回正则表达式的匹配模式

2、方法

方法描述使用示例
exec检索字符串中指定的值。返回找到的值,并确定其位置。RegExpObject.exec(string)
test检索字符串中指定的值。返回 true 或 false。RegExpObject.test(string)
toString返回一个正则表达式的字符串。RegExpObject.toString()

三、支持正则表达式的 String 对象的方法 

方法描述使用示例
search检索与正则表达式相匹配的值。存在则返回其下标,不存在则返回 -1。string.search(RegExpObject)
match找到一个或多个正则表达式的匹配。string.match(RegExpObject)
replace替换与正则表达式匹配的子串。string.replace(RegExpObject)
split把字符串分割为字符串数组。string.split(RegExpObject)

四、创建一个正则表达式

var re = new RegExp("\\w+");
或
var re = /\w+/;

五、常用正则表达式大全

常用正则表达式大全

六、推荐学习正则资源

菜鸟:正则表达式 – 语法 | 菜鸟教程

W3C:JavaScript RegExp 参考手册

阿西河:JS 正则表达式丨阿西河

JS 正则表达式必知必会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值