正则表达式中的小括号

 我来答
新科技17
2022-07-15 · TA获得超过5898个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:74.6万
展开全部
(如有错误,欢迎指正)

众所周知,正则表达式的括号大致分为以下几类

看起来很容易,用起来很复杂。

尤其是当 () 承担着更多复杂含义的时候:分组和捕获

简单来说,分组指匹配若干个连续字符: [a-z] 只能匹配一个 a-z 中的任意一个字符,但 (abcdefg) 匹配的是 abcdefg 。捕获指获取到字符串匹配正则表达式的 () 中的部分。对于 /\d+(\w+)/ 与 123abc ,捕获可以简单理解为 abc

自然是看不懂的,好在后面举了🌰

果然,还是看不懂,甚至连这个正则表达式想干什么都看不明白,这就需要来测试一下给的例子了。

终于有一个是true了,果然dada是一个令人开心的东西……

根据dada,再回头看这个正则表达式,^表示开头,()表示分组匹配,[]表示dtn三者选其一,\1是表示相等,这个相等针对的是()中的字符,本例中指a前面的字符,此时a前面的字符是d,那么\1就指代d

多试几个

此时再回过头去看前面的定义,似乎有些理解了。撇开“反向引用”这个术语不谈,将待匹配的字符串记为S,\1表示与S相等才进行匹配

理解了\1,\2也就容易理解了
\1,\2只表示需要它们出现的位置,与中间有没有分组关系不大

反向引用适合用在HTML标签的匹配上,例如

捕获可以简单理解为 正则表达式匹配到的内容

先看一个正则表达式

看起来挺复杂,掐头去尾之后就简单了

综上,这一正则表达式捕获的内容是 translateY(XXX) 中的 XXX ,其中XXX不能包含右括号,若干包含,即为右括号前面的字符。

输出的match为

match方法匹配结果通过第一个索引返回
每次捕获的结果依次递增,满足条件的值存储在match[1]的位置处(如果有多个会放在match[2]...中)
若 str = 'translateY(15p)x)' ,则 match[1] 为 15p

匹配的结果指满足正则表达式要求的完整字符串,它可以是给定的字符串也可以是给定字符串的一部分。
捕获即为满足()内条件的字符串。
(虽然不一定十分准确,但暂时应该可以这么理解)

当使用全局正则表达式时,会返回全部匹配的结果,但不会返回捕获结果

输出的结果为

可以看出,有3个待匹配的捕获,在match的1-3位输出,match[0]则是第一个满足正则表达式条件的字符串。

注意此时的正则表达式并非全部匹配(没有 /g )
如果换成全局匹配,正则表达式后加一个 g

输出的结果为

可以看到,只有匹配的结果(满足正则表达式的字符串),没有捕获的结果(满足每一个分组正则表达式的字符串)

如果需要捕获的结果,需要用到 exec 方法

输出的是,可以看到输出了每一个捕获

用 $1, $2, $3 表示
示例表示将大写字母替换为 -小写

正则表达式涉及到三个方法,用reg表示正则表达式,str表示待匹配的字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式