2017-05-18 66 views
0

我已经下面的代码段:的javascript:匹配方法返回对象,而不是阵列

var completename = file.name; 
var regex = '/-\w+_/'; 
var filenameTest_components = completename.match(/-\w+_/); 
console.log(completename); 
console.log(typeof filenameTest_components, filenameTest_components) 

我打算使用,但是阵列filenameTest_components的前两个元素,它给我错误当我尝试首先打印该阵列的元件:

console.log(filenameTest_components[1]) 

TypeError: Cannot read property '1' of null 

与此错误,如果匹配方法应该返回arrayobject我感到困惑?

SO电流输出,如果我只打印输入的字符串和匹配输出看起来如下:

task-routelearning_events.json 
object [ '-routelearning_', 
    index: 4, 
    input: 'task-routelearning_events.json' ] 

编辑:

为了给出一个较大的图片以下为GitHub的

链路https://github.com/suyashdb/bids-validator/blob/illegal_Character_underscoreInTaskname/validators/bids.js#L128

+0

另外null是类型的对象,这可能会造成混淆 – JellyKid

+0

'null'的是'object',但它不是。我甚至不明白我在说什么 – Chay22

+0

好,所以这也是令人困惑的。数组是键值从0开始的键/值对象。如果console.log(filenameTest_components ['index'])它应该输出4.技术上,输出可以说[0:'-routelearning_',...]。看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec更多信息 – JellyKid

回答

0

Javascript匹配函数将匹配返回为Array对象。

如果你想使用返回的值从匹配功能

,你必须把它转换为数组

var result = filenameTest_components.map(el => el); 
console.log(result[0]); 
+0

'el => el'代表 ? – learnningprogramming

+0

对不起,这是我的错。我没有仔细检查。 我认为这是由你的正则表达式引起的。 'el => el'代表'filenameTest_components'数组中的每个元素。 这是ES6的箭头功能,请查看下面的链接了解更多详情: http://es6-features.org/#ExpressionBodies –

0

String.prototype.match()时,有一个匹配(null否则)总是返回一个数组,但你可知道,数组是JavaScript中的对象。如果在阵列上使用typeof,则会得到objecttypeof null也会返回object)。所以确定你是否有数组的最好方法是使用Array.isArray()

var str = 'foo bar baz foo', 
 
    res = str.match(/foo/g); 
 

 
console.log(res); // ["foo", "foo"] 
 
console.log(typeof res); // object 
 
console.log(Array.isArray(res)); // true

+0

我明白了。比我怎样才能得到匹配方法的数组输出的第一个元素 – learnningprogramming

+0

像这样的:'arr [0]'。不要忘记,一个数组的第一个索引是0,而不是1 ... – Badacadabra

+0

就是这个问题。 arr [0]只返回错误。 – learnningprogramming

相关问题