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()