正则表达式,嵌套的分组

(\d+)(.)(\d+)
我知道这样的分组,每一个分组有一个序号\1\2\3,\0是整个匹配

但是如果分组里有分组,又是怎样命名的呢
比如(\s([a-z]+)\s)\d+

这里的([a-z]+)是如何命名的,或者说我要如何取得这个分组

阅读 11.2k
2 个回答
\1 \2用于正则表达式里面的构建,$1 $2用于捕获后,callback里面使用。(没有\0这个东西吧?忘了)

可以这样,外围不需要的分组,使用非捕获符号?:,这样$1 $2就是你需要的捕获了。

(?:\s([a-z]+)\s)\d+

另外 ([a-z]+) 指捕获由a到z组成的多个字符串,至少有一个字符;同理,捕获到了,就可以在match等方法的返回中可以找到对应的捕获。

正则的分组嵌套,个人认为,主要是理解其层级关系。
而,'\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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏