如何访问RegExp.prototype.exec()返回值?

时间:2017-04-27 15:22:25

标签: javascript regex

我有一个数组我想要提取以.txt结尾的所有文件,所以我应用正则表达式来查找

中的所有匹配项
var x = ["test.txt", "random.txt", "dontgetme"]
var re = RegExp(".*\.txt", "g")

当我尝试通过第一个索引访问结果时,我可以检索到正确的结果:

re.exec(x)[0]返回"test.txt,random.txt"

但是当我尝试将其存储在变量中时,我再也无法访问它了:

var y = re.exec(x)[0]返回undefined

如何将.exec的结果存储在稍后要访问的变量中?

3 个答案:

答案 0 :(得分:1)

  

var y = re.exec(x)[0]返回undefined

这是因为您正在查看var语句的返回值,该语句始终返回undefined。

您想将其分配到y,然后访问y,原因如下:

var y = re.exec(x)[0] // always undefined
console.log(y) // ok!

答案 1 :(得分:1)

您可以使用.filter().test()

var re = /\.txt$/;
var matches = x.filter(function(text) { return re.test(text) })

答案 2 :(得分:0)

  

但是当我尝试将其存储在变量中时,我再也无法访问它了:

var y = re.exec(x)[0] returns undefined

你只能在REPL环境中看到它(比如控制台)。 var语句会生成undefined。但是y会有价值。

如果您将x直接传递到exec,则会被强制转换为字符串,最终会以"test.txt,random.txt,dontgetme"结束。

另请注意,您不希望g标记, 想要逃避.中的.txt。这里不需要new RegExp,只需使用文字形式:/.*\.txt/

不是将x传递给exec,而是为了获得每个结果,请使用某种循环。例如,我在这里使用map来创建结果数组。在map内,我使用[0]来访问数组exec中的第一个返回内容,因为这是它为正则表达式返回的唯一有用的东西:

var x = ["test.txt", "random.txt", "dontgetme"]
var re = /.*\.txt/;
var result = x.map(function(entry) {
  var match = re.exec(entry);
  return match ? match[0] : null;
});
console.log(result);