我想在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会识别(或者我只是没有正确使用它)。如何保留游标,以便不会一遍又一遍地重复相同的数据?谢谢!
答案 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美分。
编辑:
如果您正在编写解析,我可以看到第一个解析的原因。在再次运行模式匹配之前,只需添加代码来解析行(并跟踪光标位置),然后将其传递给子字符串,而不是前一个匹配的索引加上匹配的长度。