(\d+)(.)(\d+)
我知道这样的分组,每一个分组有一个序号\1\2\3
,\0
是整个匹配
但是如果分组里有分组,又是怎样命名的呢
比如(\s([a-z]+)\s)\d+
这里的([a-z]+)
是如何命名的,或者说我要如何取得这个分组
(\d+)(.)(\d+)
我知道这样的分组,每一个分组有一个序号\1\2\3
,\0
是整个匹配
但是如果分组里有分组,又是怎样命名的呢
比如(\s([a-z]+)\s)\d+
这里的([a-z]+)
是如何命名的,或者说我要如何取得这个分组
正则的分组嵌套,个人认为,主要是理解其层级关系。
而,'\1\2\3'...,此类,就是反向引用了。
具体的你可以进入这个网址(某大神整理),耐心的看一遍,相信你会很有收获,http://blog.csdn.net/zgrkaka/...
那对于你给出的,(s([a-z]+)s)d+,其实就是两层的括号嵌套,也就只需要 \1\2 就能全部匹配出来
\1,会匹配第一个括号(分组)的内容,即,s([a-z]+)s
\2,会匹配第二个括号(分组)的内容,即,[a-z]+
\1\2\3、、、,即反向引用,其规则,我现在的理解是:由左向右,有外向内
想要获取值的话,可以使用,构造函数的全局属性 $1 至 $9 来获取
var string = ' abc 123 abc abc';
var regex = /(\s([a-z]+)\s)\d+\1\2/;
console.log(RegExp.$1);
//=> abc
console.log(RegExp.$2);
//=>abc
2 回答10.5k 阅读✓ 已解决
3 回答3k 阅读✓ 已解决
5 回答2.1k 阅读
可以这样,外围不需要的分组,使用非捕获符号
?:
,这样$1 $2
就是你需要的捕获了。另外
([a-z]+)
指捕获由a到z
组成的多个字符串,至少有一个字符;同理,捕获到了,就可以在match等方法的返回中可以找到对应的捕获。