我正在开始使用 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/