javascript - RegExp 不会产生预期的结果,但它在其他地方都会产生

标签 javascript node.js regex

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

我有以下正则表达式:/([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

如何获取排序数组中的每个单独结果?

附:match()test()是“不是函数”。

最佳答案

要使用 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 将在正则表达式对象上设置 .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() 形式来获取多个匹配,每个匹配有多个组。

关于javascript - RegExp 不会产生预期的结果,但它在其他地方都会产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174728/

相关文章:

javascript - Node.js : How to run a special function as server starts as a initialization?

javascript - 按下空格键时触发按钮单击(网页)

java - 如何生成 PDF 发票并将其附加到电子邮件?

javascript - 如何在事件发生后执行测试

javascript - 正则表达式:我只想匹配末尾没有点的单词

Handlebars 中的 Javascript "any string"正则表达式?

javascript - 使用 jQuery 将参数从 MVC View 传递到操作

node.js - React App在本地运行,但在Heroku上崩溃并显示错误代码= H10

python - 在 python 中格式化文本文件

javascript 调用函数作为数组元素