错误对象为字符串

时间:2013-06-28 11:45:44

标签: javascript

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

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\'' ]

试图将Error对象字符串化......

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

......但它是空的:

stringify: {}

4 个答案:

答案 0 :(得分:2)

您创建了一个Error对象,并且该对象不是字符串。但是你可以通过调用它的toString方法并在结果上应用匹配来解决这个问题:

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

答案 1 :(得分:1)

尝试以下代码,它可以正常工作。不需要toString()

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

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

尝试块已明确抛出错误对象,并根据您给出的示例捕获具有引用值的错误消息。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

getInQuotes(err.message)