RegExp不会产生预期的结果,但它会在其他任何地方产生

时间:2018-01-09 18:42:30

标签: javascript node.js regex

我开始使用Node.js并尝试学习它,来自PHP环境。

我有以下RegExp:/([A-Z]{2,})+/gim(两个或多个字母彼此相邻) 我有以下字符串:"That's my testing sample but it doesn't work."

所以我将它扔进Node.js(请记住我是新手):

var fs = require("fs");
var request = require("request");
// COMMENTS
var regex = new RegExp(/([A-Z]{2,})+/gim);

//COMMENTS

var thisyear = regex.exec("That's my testing sample but it doesn't work.");

console.log(thisyear);

这是完整的文件。

它返回的输出:

[ 'That',
  'That',
  index: 0,
  input: 'That\'s my testing sample but it doesn\'t work.' ]

几乎每个我测试过的网站都有输出:

That
my
testing
sample
but
it
doesn
work

如何在各种排序中获得每个单独的结果?

P.S。:match()test()是"不是功能"。

1 个答案:

答案 0 :(得分:1)

要使用g标记获得多个结果,请多次调用.exec(),如下所示:

let regex = /([A-Z]{2,})+/gim;
let str = "That's my testing sample but it doesn't work.";
let results;

while ((results = regex.exec(str)) !== null) {
    console.log(results[0]);
}

Javascript将在regex对象上设置.index属性以跟踪它在源字符串中搜索的位置,每次调用它时,它将返回下一组结果。

注意:使用正则表达式/something/的文字形式时,不要将其放在new RegExp()构造函数中。使用文字语法时,该语言会自动使您成为正则表达式对象。

仅供参考,您可以在不使用while的情况下获得所有匹配:

let re = /([A-Z]{2,})+/gim;
let str = "That's my testing sample but it doesn't work.";
console.log(str.match(re));

这通常是更简单的方法,除非您需要从正则表达式中获取组。如果您需要分组而不仅仅是整个匹配,那么您必须使用.exec()表单来获得多个匹配,每个匹配都有多个组。