我有以下代码:
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
如果匹配方法应该返回array
或object
,我会感到困惑吗?
如果我只打印输入字符串并匹配输出,则当前输出如下所示:
task-routelearning_events.json
object [ '-routelearning_',
index: 4,
input: 'task-routelearning_events.json' ]
编辑:
为了给出更大的图片,下面是github的链接
答案 0 :(得分:1)
如果匹配则返回数组,否则返回null
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
答案 1 :(得分:0)
Javascript match函数将匹配作为Array对象返回。
如果您想使用匹配函数的返回值,则必须将其转换为数组
var result = filenameTest_components.map(el => el);
console.log(result[0]);
答案 2 :(得分:0)
String.prototype.match()
总是在匹配时返回一个数组(否则为null
),但正如您所知,数组是JavaScript中的对象。如果您在数组上使用typeof
,则会object
(typeof 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