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

Javascript 如何访问RegExp.prototype.exec()返回值?,javascript,regex,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] returns un

我有一个数组,我想提取以
.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] returns undefined
var y=re.exec(x)[0]
返回
未定义的

如何将
.exec
的结果存储在一个变量中,以便以后访问

var y=re.exec(x)[0]
返回
未定义的

这是因为您正在查看
var
语句的返回值,该语句总是返回未定义的值

您希望将其分配给
y
,然后访问
y
,如下所示:

var y = re.exec(x)[0] // always undefined
console.log(y) // ok!
您可以使用
.filter()
.test()

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

var y = re.exec(x)[0] returns undefined
您只能在REPL环境(如控制台)中看到这一点<代码>变量
语句导致
未定义
。但是
y
将具有该值

如果您将
x
直接传递到
exec
,它将被强制转换为字符串,您将得到
“test.txt、random.txt、dontgetme”

还要注意的是,您不希望使用
g
标志,而是希望在
.txt
中转义
。这里不需要
新的RegExp
,只需使用文本形式:
/.\.txt/

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

var x=[“test.txt”、“random.txt”、“dontgetme”]
变量re=/.\.txt/;
var结果=x.map(函数(条目){
var match=re.exec(条目);
返回匹配?匹配[0]:空;
});

控制台日志(结果)@webbm不,不会的。它将数组合并成一个字符串,并匹配所有字符,直到最后一个
.txt
.FYI,您需要在.txt中转义句点,否则它将匹配任何字符,因此btxt.exe将匹配并可能关闭示例代码中的字符串和括号。@PeterLaBanca如何在.txt中转义句点?在句点之前添加一个前导斜杠。例如:RegExp(“.\.txt”,“g”)”这是因为您正在执行一个赋值,它总是返回undefined。“不,如果您正在赋值
undefined
,赋值只会导致
undefined
<另一方面,code>var
语句总是导致
undefined
(您只能在REPL环境中观察到这一点)。我认为正则表达式在每次迭代中都会实例化。也许最好将其保存在单独的变量中。通常,正则表达式是在正则表达式构造时编译的,并且该操作需要花费时间。@将数组转换为字符串并使用
.match()