Javascript - 正则表达式仅捕获前3场比赛

时间:2015-07-14 16:29:00

标签: javascript regex

首先,提前感谢您提供的任何帮助。

我的正则表达式只捕获我想要提取的字符串的前3个实例。有什么想法吗?

我的代码:

var objArgs         = WScript.Arguments;
var objFileSys      = new ActiveXObject("Scripting.FileSystemObject");
var objFolder       = objFileSys.getFolder(objArgs.Item(0));
var objTSetNum      = new RegExp("^ST.((\\d+)+)", "gm");
var objFile         = null;
var srcFile         = null;

for (var objFileEnum = new Enumerator(objFolder.files); !objFileEnum.atEnd(); objFileEnum.moveNext()) {
objFile = objFileSys.OpenTextFile(objFileEnum.item(), 1, false, 0);
srcFile = objFile.ReadAll();
objFile.Close();

// Check for different values in the TSet entries
// Build array to hold all TSet values found
var arrTSet;
while ((arrTSet = objTSetNum.exec(srcFile)) !== null) {
    // arrTSet = objTSetNum.exec(srcFile);
    WScript.Echo("arrTSet is: " + arrTSet);
    WScript.Echo("Length of arrTSet is: " + arrTSet.length)
    //var allTSetSame = true;
}

一个示例文本文件有5个以“ST *”开头的行的实例 - 不应该全部放入数组中吗?:

ISA*00*          *00*          *01*041199639      *08*9272590000     *150704*1131*U*00401*000001324*0*P*:
ST*865*0001
ST*865*0001
ST*865*0001
ST*865*0001
ST*865*0001
IEA*5*000001324

有什么建议吗?我的预感告诉我exec()函数正在改变一些东西,但是我找不到任何有关它可能改变的细节。

感谢帮助!

编辑:当然,一旦我发布了它,我找到了答案。 exec()是有状态的,所以我需要将每个返回的结果推送到数组中,类似于:

var arrTSet = [];
var match;  

  while (match = objTSetNum.exec(srcFile)) {
    arrTSet.push(+match[1]);            
}

在这里找到了(给予信任): Why does Javascript's regex.exec() not always return the same value?

2 个答案:

答案 0 :(得分:1)

我认为问题可能是RegExp.exec没有返回所有可能结果的数组,它返回该结果中所有匹配的第一个结果。如果你仔细查看你回来的那个数组,那么你的匹配将是:

  1. ST*865
  2. 865
  3. 865
  4. 每次调用时,Exec都会继续返回下一场比赛

答案 1 :(得分:1)

这里已经回答:

Why does Javascript's regex.exec() not always return the same value?

对于已经回答的问题感到抱歉。