从API接收数据并使用match()寻找tecto,碰巧在某些情况下match()不正确,然后为null,我收到以下错误消息:
未捕获(承诺)TypeError:无法读取null的属性“ 1”
我尝试验证match()是否为null,表明数据为空字符串,但仍会返回相同的错误。
如何消除控制台中的错误?
我的代码:
let text = jsonDesc.plain_text;
dataOfProduct.description.desc = text;
const product = 'Producto:';
let resultProduct = text.match(new RegExp(product + '\\s(\\w+)', 'i'))[1];
const model = 'Modelo:';
let resultModel = text.match(new RegExp(model + '\\s(\\w+)', 'i'))[1];
if( resultProduct !== null && resultProduct.length > 1){
dataOfProduct.description.title = resultProduct;
} else{
dataOfProduct.description.title = ''
}
if( resultModel !== null && resultModel.length > 1 ){
resultModel.description.model = resultModel;
} else{
resultModel.description.model = ''
}
答案 0 :(得分:2)
您的问题是,如果text
字符串与正则表达式不匹配,则match函数将返回null,它不带有[1]。您必须将match结果存储在一个变量中,并在尝试获取[1]之前确定该结果是否为null。
let resultProduct = text.match(new RegExp(product + '\\s(\\w+)', 'i'));
if (resultProduct != null) {
resultProduct = resultProduct[1];
}
如果匹配项找到了某些内容,则代码进入if内,并从中获取[1]。如果不是,则为null,并且不进入if和您的下一个if then检查,以查看resultProduct是否为null。
您需要同时进行产品匹配和型号匹配。
答案 1 :(得分:-1)
使用以下方法,您可以检查输入值是否为空字符串(“”),null,undefined,false以及数字0和NaN。
var val = jsonDesc.plain_text;
if(!val){
}