在逐行读取文件时应用RegEx.exec()时的矛盾行为

时间:2015-09-16 14:26:04

标签: javascript regex node.js fs line-by-line

我正在尝试这样做:

render(argv,function() {

  var fileHandle = argv.output + '/docu.html';
  var regex_ca_id = new RegExp('[A-Za-z1-9]{16}#[A-Za-z1-9]{5}',"g");

  var rd = readline.createInterface({
    input: fs.createReadStream(fileHandle),
    output: process.stdout,
    terminal: false
  });

  rd.on('line', function(line) {
    if(regex_ca_id.test(line)) {
      console.log('Debug: '+regex_ca_id.test(line)+
                  '  '+regex_ca_id.exec(line)+'   '+line);
  }

  rd.close();
  process.stdin.destroy();
});

在html文件(“fileHandle”见上文)中,其中包含以下行:

<p class="img-container"><img src="UU4GBVJyst5kqS8O#732F4-50" alt="I am a picture" title="An Image"></p>
<p>Dies ist <a href="UU4GBVJyst5kqS8O#732F4-50" title="An Image">ein Beispiel</a> für einen Referenz-Link.</p>

生成此输出,该输出由console.log()行发出:

Debug: false  UU47GZJyst5kqS8O#732F4   <p class="img-container"><img src="UU4GBVJyst5kqS8O#732F4-50" alt="I am a picture" title="An Image"></p>
Debug: false  UU47GZJyst5kqS8O#732F4   <p>Dies ist <a href="UU4GBVJyst5kqS8O#732F4-50" title="An Image">ein Beispiel</a> für einen Referenz-Link.</p>

输出是我没想到的。 regex_ca_id.test(line)计算结果为true,因此if结构的主体开始。现在,console.log中的相同语句的计算结果为false,之后使用的上一个RegExp对象的exec()返回成功匹配的字符串。

其他用法:

var result = regex_ca_id.exec(line);
rd.on块中的

将被赋值为null。

这看起来与我不一致,谢谢你帮我理解这种行为。

斯蒂芬

0 个答案:

没有答案