我有一个数组我想要提取以.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
的结果存储在稍后要访问的变量中?
答案 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);