const [, segment1, segment2] = "string".match(/([^/]+)\/(.*)/);
返回对象 null 不可迭代(无法读取属性 Symbol(Symbol.iterator))
const [, segment1, segment2] = "name/lastname".match(/([^/]+)\/(.*)/);
console.log(segment1, segment2)
如何检查是否可迭代?或者检查 segment1 和 segment2 是否都不是空/未定义?
答案 0 :(得分:3)
您需要将 match
的结果分配给一个变量,以便在尝试使用捕获组之前测试匹配是否成功。
const match = "string".match(/([^/]+)\/(.*)/);
if (match) {
const [, segment1, segment2] = match;
console.log(segment1, segment2);
}
答案 1 :(得分:1)
astring.match(/re(g)e(x)/)
返回 null
。并且您无法将 null
解构为对象或数组。
所以您可以执行以下操作
let [,a,b] = (astring.match(/re(g)e(x)/) || []);
即,如果 match
返回 null
,则返回一个您可以解构的默认数组。那么 a
和 b
都将是 undefined
。
答案 2 :(得分:1)
你也可以这样做:
const [fullMatch, segment1, segment2] = "string".match(/([^/]+)\/(.*)/)??[null];
if(fullMatch!==null) {
console.log(segment1, segment2)
}
如果 match
未找到任何内容,则返回 null
,如果是这种情况,您可以使用 ??
运算符并使用 [null]
作为表达式的结果。>
这样 fullMatch
将是一个字符串,如果匹配或 null
如果没有匹配发生。
但我仍然建议使用 Barmar 的答案,因为 segment1
和 segment2
仅存在于 if 块中。
我展示的代码实际上只有在您使用 let
而不是 const
时才有意义,并且当您希望在找不到匹配项的情况下为这两个变量分配一些后备值时。