正则表达式之捕获重用

正则表达式中可以进行重用的表达方式

(x)

匹配 'x' 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。

模式/(foo) (bar) \1 \2/中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 \1 和 \2 匹配字符串的后两个单词。注意 \1、\2、\n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。

(?:x)

匹配 'x' 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。

例子讲解:

/(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/; 

 (?:\d{3}|\(\d{3}\)) 表示不记住捕获

 ([-\/\.])表示记住捕获

  \1表示重用前面捕获到的格式,\1表示第一个捕获到的,\2表示第二个捕获到的

所以符合该正则表达式的数据为 (123)-123-1234 或者 123-123-1234

在线正则表达式测试

posted @ 2018-07-11 10:10  做个有追求的程序猿  阅读(382)  评论(0编辑  收藏  举报