错误对象到字符串

Error object to string

本文关键字:字符串 对象 错误      更新时间:2023-09-26

我想使用正则表达式来处理错误消息。。。

try {
  throw new Error("Foo 'bar'");
} catch (err) {
  console.log(getInQuotes(err));
}

其中getInQuotes是字符串的函数:

var getInQuotes = function(str) {
  var re;
  re = /'([^']+)'/g;
  return str.match(re);
};

但出现错误:

Object Error: Foo 'bar' has no method 'match'

尽管它适用于通常的字符串:

console.log(getInQuotes("Hello 'world'"));

结果:

[ '''world''' ]

已尝试字符串化错误对象。。。

console.log("stringify: " + JSON.stringify(err));

但它是空的:

stringify: {}

您创建了一个Error对象,但它不是字符串。但您可以简单地通过调用其toString方法来解决此问题,并对其结果应用匹配:

function getInQuotes(err) {
  var re;
  re = /'([^']+)'/g;
  return err.toString().match(re);
};

基本上,我们在这里尝试获得带注释的字符串。如果我们使用正则表达式,那么如果确实需要的话,我们需要一个正确的情况。

如果没有,下面的字符串替换将是更容易的解决方案。

// Arrow Function read given string and strip quoted values.
// Basic example
const getInQuotes = (str) => str.replace( /^[^']*'|'.*/g, '' );

为了让它更通用。下面的函数有助于保持这个注释器(')是可配置的。以下代码是最新的ES2021代码。

  1. 这在RegExp函数中使用模板文字
  2. 注释器是可配置的
  3. 将方法名称CCD_ 2更改为CCD_
  4. 方法始终返回数组,以保持其可预测性并避免其他错误
  5. 最好不要传递整个对象,因为它只需要错误消息
function getAnnotatedStrings(errorMessage, annotator = "'") {
  if (!annotator || !errorMessage) return []
  const regex = new RegExp(`${annotator}([^']+)${annotator}`, 'g')
  return errorMessage.toString().match(regex);
}

ES2021代码中的实际值。

try {
  throw new Error("Foo 'bar'");
} catch (e) {
  console.log(getAnnotatedStrings(e?.message)); // outputs - bar
}

参考:错误对象简介
Regex函数和基础
模板文字

err不是字符串,它是Error对象,因此没有.match()函数。您应该使用Error对象的toString()方法调用函数,方法如下:

try {
    throw new Error("Foo 'bar'");
} 
catch (err) {
    console.log(getInQuotes(err.toString())); 
}

试试这个http://jsfiddle.net/B6gMS/1/

getInQuotes(err.message)