在JavaScript中,是否可以循环遍历正则表达式范围?

4

我在想,是否可以在JavaScript中循环遍历一个正则表达式范围。比如说,如果我想循环遍历字母表中的每个字母,我可以这样做:

var theAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
[].forEach.call(theAlphabet, function (a) {
    console.log(a);
});

请注意,我知道我可以在字符串上使用 .split() 并进行循环来完成此操作,但是我在想能否使用正则表达式范围,类似于这样(我知道它不起作用)
var reg = new RegExp(/A-Z/), result;
while((result = reg.exec(reg)) !== null) {
    console.log(result); // ["A-Z", index: 1, input: "/A-Z/"] - Not correct I realise
}

我只是想知道一些事情。如果这是一个愚蠢的问题,请告诉我,我会把它删除。


1
我认为这是不可能的。正则表达式在序列中查找模式,因此范围在查询之前没有实际形式。此外,当您运行正则表达式时,您会得到一个单一的结果,所以(我最好的猜测 - 我已经多年没有编写JS了),您的while循环将简单地将整个结果作为一个字符串转储。您仍然需要拆分和迭代以获取单个字符。即使它确实起作用,它也不是特别高效的方法。 - Alex
1
这也是我想的,我只是认为,如果有一个定义好的范围,比如A-Z,那么出错的可能性就会比我们创建一个包含所有字符的字符串要小,不用担心... - Mike Sav
1
根据我的经验,使用正则表达式容易出现错误。编写高效的正则表达式查询非常困难,而编写缓慢的查询却非常容易。如果您有一个完全由字母字符组成的字符串,只需将它们放入自己的JS文件中,并在需要时引用它。然后,如果您担心出错(这是一件值得谨慎的事情,所以要赞扬),在部署代码之前请其他人为您的代码进行校对。除非您真的需要从字符串中解析某些内容,否则最好避免使用正则表达式。 - Alex
2个回答

3
这个问题不太清楚,但我认为您是在问是否可以用正则表达式替换split。当然可以这样做,但有两件事需要考虑。
您一直在为每个字母调用新的正则表达式,这将带来一些性能开销。如果您像在此链接中所示的那样进行操作:http://jsperf.com/regex-vs-split/2,显然比split更好。这可能在每种语言中都不同,但在JS中似乎是这样的。

0

你不能迭代正则表达式。正则表达式可以与字符串匹配或测试,但没有字符串就没有结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接