【问题标题】:Proper regular expression for server error message服务器错误消息的正确正则表达式
【发布时间】:2012-07-19 09:30:37
【问题描述】:

我正在进行 Ajax 调用,但我收到来自服务器的错误。

现在的问题是我收到以下消息。

HTTP Status 756 - Error while processing the request.

--------------------------------------------------------------------------------

type Status report

message Error while processing the request.

description Cannot find message associated with key http.756

我只想从完整的错误报告中获取错误消息,而不是上面的所有文本。我该怎么做?

但实际的反应是

<html><head><title>Apache Tomcat/5.0.28 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 756 - Error while processing the request.</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Error while processing the request.</u></p><p><b>description</b> <u>Cannot find message associam<D‡üñÔE(1@@ähttp.756</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.0.28</h3></body></html>​

我想从哪里得到错误信息。

【问题讨论】:

    标签: java javascript regex error-handling alert


    【解决方案1】:

    当您返回response HTML 时,您可以像这样抓取消息...

    var div = document.createElement("div");
    
    div.innerHTML = response;
    
    var errorMsg = [].filter.call(div.getElementsByTagName("b"), function(b) {
        return b.textContent == "message";
    })[0].nextElementSibling.textContent || "Unknown error";
    

    jsFiddle.


    如果只是文字……

    这将提取第一行 - 之后的文本。如果找不到匹配项,则会返回“未知错误”。

    var errorMsg = (response.split("\n")[0].match(/^HTTP Status \d+ - (.+)$/) 
                    || [])[1]
                    || "Unknown error";
    

    jsFiddle.

    如果您想匹配下面的message 行。

    var errorMsg = (response.match(/^message (.+)$/m) || [])[1] || "Unknown error";
    

    jsFiddle.

    【讨论】:

    • message (.*)不是更好吗?
    • @hsz 在 OP 的示例中它们似乎是同一件事。
    • @hsz 我也添加了一个例子来说明如何做到这一点:)
    • @BhavikAmbani 这应该包含在您的原始答案中。那你能把 HTML 贴出来吗?
    • @alex 上面是什么东西?
    【解决方案2】:

    检查这个工作示例:Regex

    (?<=-\s).*
    

    (?<=[0-9]\s-\s).*
    

    这将获取确切的消息:Error while processing the request.

    编辑

    如果它包含HTML,那么这将起作用:Updated Regex

    (?<=<h1>).*(?=</h1>)
    

    【讨论】:

    • 意味着你得到HTML格式的结果..如果是,你能在问题中指定..吗?
    • 请查看已编辑的问题,我想从哪里获取错误代码和错误消息
    • JavaScript 正则表达式不支持lookbehinds。
    【解决方案3】:

    我通过以下 JavaScript 代码得到了答案。

    var res = "Error Message : '";
    
    var bonly = data.responseText.match(/<h1>(.*?)<\/h1>/);
    if (bonly && (bonly.length > 1)) {
        res += bonly[1];
    }
    res += "'. Error Code : ";
    res += data.status;
    return res;
    

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多