正则表达式中的小括号
展开全部
(如有错误,欢迎指正)
众所周知,正则表达式的括号大致分为以下几类
看起来很容易,用起来很复杂。
尤其是当 () 承担着更多复杂含义的时候:分组和捕获
简单来说,分组指匹配若干个连续字符: [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表示待匹配的字符串
众所周知,正则表达式的括号大致分为以下几类
看起来很容易,用起来很复杂。
尤其是当 () 承担着更多复杂含义的时候:分组和捕获
简单来说,分组指匹配若干个连续字符: [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表示待匹配的字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询