设置正则表达式游标

时间:2015-06-02 15:22:55

标签: javascript regex

我想在javascript中设置游标,所以当我使用正则表达式时,它会识别它已经解析过的数据,并从那一点继续。下面是一段代码,显示了文件的内容。

# vtk DataFile Version 4.0

-3659.0757       3746.6780       3628.1143    
-3659.6714       3746.2517       3627.9539    
-3660.1450       3745.8142       3627.9270    
-3660.4631       3745.3735       3628.0605    
-3660.6931       3745.0708       3628.1416    

LINES 207 31529

581 0 1 2 3 4 ... 579 580

目前我正确地选择了float float float模式,我希望我的代码继续LINES 207 31529然后581。此代码选择LINES,但不会转到581,而是返回到文件顶部,numLines需要4。

var LINES = /(LINES)[ ]+[\d]+[ ]+[\d]+[\n]/;
var recogLines = /[\d]+/;
var numLines = parseInt(recogLines.exec(data));

我在网上看到了关于\ G的内容,但我不认为javascript会识别(或者我只是没有正确使用它)。如何保留游标,以便不会一遍又一遍地重复相同的数据?谢谢!

1 个答案:

答案 0 :(得分:0)

我会建议一些事情(可能在语法上不正确):

var LINES = '/(LINES)[ ]+([\d]+)[ ]+([\d]+)\n/';
var data = <input>;
var output = new Array();

result = LINES.exec(data);
while(result) {
   output.push([result[1], result[2], result[3]]);
   result = LINES.exec(data.substring(result.index + result[0].length);
}

但是在那时,我会使用全局修饰符:

var LINES = '/^(LINES)[ ]+([\d]+)[ ]+([\d]+)$/gm';
result = LINES.exec(data);

会给你一个数组:

array[0][2] // first LINE, first set of numbers
array[0][3] // first LINE, second set of numbers
array[1][2] // second LINE, first set of numbers
array[1][3] // second LINE, second set of numbers

只需2美分。

编辑:

如果您正在编写解析,我可以看到第一个解析的原因。在再次运行模式匹配之前,只需添加代码来解析行(并跟踪光标位置),然后将其传递给子字符串,而不是前一个匹配的索引加上匹配的长度。