获取正则表达式中的第六个匹配行


GeraLinha('1', '            860,96 ', 1'18/11/2010', '0237.02912.1999.0022512 ');
GeraLinha('1', '          1.858,60 ', '17/11/2010', '0237.02911.1999.0033109 ');
GeraLinha('1', '            397,76 ', '17/11/2010', '0237.02911.1999.0032989 ');
GeraLinha('1', '            300,62 ', '17/11/2010', '0237.02911.1999.0032898 ');
GeraLinha('1', '            915,95 ', '12/11/2010', '0422.02896.1999.0000277 ');
GeraLinha('1', '            549,30 ', '18/11/2010', '0237.02912.1999.0059833 ');
GeraLinha('1', '            861,88 ', '24/11/2010', '0237.02916.1999.0000134 ');
GeraLinha('1', '            936,62 ', '19/11/2010', '0356.02703.1999.0072998 ');
GeraLinha('1', '            384,15 ', '18/11/2010', '0033.02907.1999.0004992 ');
GeraLinha('1', '            958,82 ', '17/11/2010', '0237.02911.1999.0032926 ');
GeraLinha('1', '            766,86 ', '22/11/2010', '0341.02922.1999.0000166 ');
GeraLinha('1', '            300,26 ', '17/11/2010', '0237.02911.1999.0033505 ');

我使用以下正则表达式来匹配该组,但我只想要第六行。是否可以在正则表达式中定义"我想要第六场比赛"?如果根本不可能,有没有其他方法可以达到预期的结果?

http://regexr.com/3cas9

正如你在这里看到的,我正在匹配所有。

/GeraLinha((.*));/g

您可以匹配 5 行,从 GeraLinha( 开始,然后匹配并捕获第 6 行:

(?:GeraLinha(.*r?n){5}(GeraLinha(.*)

查看正则表达式演示

在这里,由于{5}限制量词(?:GeraLinha(.*r?n){5}子形态匹配 5 条线。然后,我们只需匹配并捕获下一行,即第 6 行。

var re = /(?:GeraLinha.*r?n){5}(GeraLinha.*)/; 
var str = 'GeraLinha('1', '            860,96 ', 1'18/11/2010', '0237.02912.1999.0022512 ');nGeraLinha('1', '          1.858,60 ', '17/11/2010', '0237.02911.1999.0033109 ');nGeraLinha('1', '            397,76 ', '17/11/2010', '0237.02911.1999.0032989 ');nGeraLinha('1', '            300,62 ', '17/11/2010', '0237.02911.1999.0032898 ');nGeraLinha('1', '            915,95 ', '12/11/2010', '0422.02896.1999.0000277 ');nGeraLinha('1', '            549,30 ', '18/11/2010', '0237.02912.1999.0059833 ');nGeraLinha('1', '            861,88 ', '24/11/2010', '0237.02916.1999.0000134 ');nGeraLinha('1', '            936,62 ', '19/11/2010', '0356.02703.1999.0072998 ');nGeraLinha('1', '            384,15 ', '18/11/2010', '0033.02907.1999.0004992 ');nGeraLinha('1', '            958,82 ', '17/11/2010', '0237.02911.1999.0032926 ');nGeraLinha('1', '            766,86 ', '22/11/2010', '0341.02922.1999.0000166 ');nGeraLinha('1', '            300,26 ', '17/11/2010', '0237.02911.1999.0033505 ');';
var m = str.match(re);
if (m !== null) {
    document.write(m[1]);
}

如果你可以考虑一种几乎非正则表达式的方法,你可以拆分行,只得到索引 5 的行(我正在使用/r?n+/正则表达式来匹配换行符以支持 Unix 和 Windows 操作系统换行符样式(:

var str = 'GeraLinha('1', '            860,96 ', 1'18/11/2010', '0237.02912.1999.0022512 ');nGeraLinha('1', '          1.858,60 ', '17/11/2010', '0237.02911.1999.0033109 ');nGeraLinha('1', '            397,76 ', '17/11/2010', '0237.02911.1999.0032989 ');nGeraLinha('1', '            300,62 ', '17/11/2010', '0237.02911.1999.0032898 ');nGeraLinha('1', '            915,95 ', '12/11/2010', '0422.02896.1999.0000277 ');nGeraLinha('1', '            549,30 ', '18/11/2010', '0237.02912.1999.0059833 ');nGeraLinha('1', '            861,88 ', '24/11/2010', '0237.02916.1999.0000134 ');nGeraLinha('1', '            936,62 ', '19/11/2010', '0356.02703.1999.0072998 ');nGeraLinha('1', '            384,15 ', '18/11/2010', '0033.02907.1999.0004992 ');nGeraLinha('1', '            958,82 ', '17/11/2010', '0237.02911.1999.0032926 ');nGeraLinha('1', '            766,86 ', '22/11/2010', '0341.02922.1999.0000166 ');nGeraLinha('1', '            300,26 ', '17/11/2010', '0237.02911.1999.0033505 ');';
var lines = str.split(/r?n+/);
if (lines !== null && lines.length>5) {
   document.write(lines[5]);
  }

只需一次匹配所有 6 行即可。
第 6 行内容(使用正则表达式(位于捕获组 1 中。

这是有效的,因为量化组的每次迭代{6}
捕获缓冲区 1 将被覆盖,仅保留第 6 行数据。

对于连续线:

text.match(/(?:^GeraLinha((.*));s*){6}/m);

对于非连续线:

text.match(/(?:^GeraLinha((.*));s*(?:(?!^GeraLinha(.*);s*)^.*s*)*){6}/m);

格式 化:

 (?:
      ^ GeraLinha(
      ( .* )                        # (1)
      ); s* 
      (?:
           (?! ^ GeraLinha( .* ); s* )
           ^ .* s* 
      )*
 ){6}

最新更新