我想使用正则表达式来处理错误消息...
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: {}
答案 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)