6

我構建了這個正則表達式在http://regextester.com解析YSOD但VS抱怨語法錯誤。我確信我錯過了某處的逃跑,但我空白了。YSOD死亡JavaScript正則表達式RegExp - 語法錯誤

這是原始格式。任何幫助表示讚賞。

var rxYSOD = /<!--\s*\[(.*?)]:(\s*.*\s(.*\n)*?)\s*(at(.*\n)*)-->/gs; 

UPDATE: 了Kobi指出了明顯的,讓我再次感動。對於那些有興趣的人來說,這是一個有效的JavaScript來測試和解析一個ASP.net黃色死亡屏幕(YSOD)的XMLHttpRequest.responseText。

var rxYSOD = /<!--\s*\[(.*?)]:(\s*.*\s(.*[\n\r]*)*?)\s*(at(.*[\n\r]*)*)-->/; 
if (rxYSOD.test(text)) { 
    // looks like one.. 
    var ysod = rxYSOD.exec(text); 
    errObj = { Message: ysod[2], StackTrace: ysod[4], ExceptionType: ysod[1] }; 
} 

@Kobi - 這是結果,我想解析HTML的原因,即使我得到一個500:

{ 
"message": " Unknown web method ValidateUser.\r\nParameter name: methodName\r\n", 
"stackTrace": "at System.Web.Script.Services.WebServiceData.GetMethodData(String methodName)\r\n at System.Web.Script.Services.RestHandler.CreateHandler(WebServiceData webServiceData, String methodName)\r\n at System.Web.Script.Services.RestHandler.CreateHandler(HttpContext context)\r\n at System.Web.Script.Services.RestHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)\r\n at System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)\r\n at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)\r\n at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()\r\n at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)\r\n", 
"exceptionType": "ArgumentException", 
"errorObject": { 
    "Message": " Unknown web method ValidateUser.\r\nParameter name: methodName\r\n", 
    "StackTrace": "at System.Web.Script.Services.WebServiceData.GetMethodData(String methodName)\r\n at System.Web.Script.Services.RestHandler.CreateHandler(WebServiceData webServiceData, String methodName)\r\n at System.Web.Script.Services.RestHandler.CreateHandler(HttpContext context)\r\n at System.Web.Script.Services.RestHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)\r\n at System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)\r\n at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)\r\n at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()\r\n at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)\r\n", 
    "ExceptionType": "ArgumentException" 
}, 
"statusCode": 500, 
"servicePath": "/Authentication_JSON_AppService.axd", 
"useGet": false, 
"params": { 
    "username": "testingUser", 
    "password": "testingUser", 
    "customCredential": null 
}, 
"methodName": "ValidateUser", 
"__typeName": "Salient.ScriptModel.WebServiceError" 
} 
+0

您是否也不會爲這些屏幕獲得狀態碼「500 Internal Server Error」?無論如何,祝你好運! – Kobi 2010-02-28 11:49:50

+0

@Kobi,是的,當然可以。這就是爲什麼我解析頁面,因爲它有實際的例外。沒有什麼我討厭更糟糕的是,當信息實際上可用時,捕獲所有異常信息。 – 2010-02-28 11:57:07

回答

4

火狐說:

Error: invalid regular expression flag s 
Source Code: 
var rxYSOD = /<!--\s*\[(.*?)]:(\s*.*\s(.*\n)*?)\s*(at(.*\n)*)-->/gs; 

取出後s它似乎沒問題(當然,它沒有測試,只是正確解析)。

+0

備案:Ctrl + Shift + J給出錯誤控制檯。 – Kobi 2010-02-28 11:30:57

+0

謝謝。這是那些深夜,我明顯在午夜時分聽到明顯的耳朵泄漏的情況之一。 – 2010-02-28 11:30:57

+0

r.e. CTRL + SHFT + J - 是的,我使用它很多。我在很多javascript intellisense代碼上工作... – 2010-02-28 11:31:52

2

標記s在Javascript中無效。要更換,請使用replace方法。

+0

謝謝,馬克。你是對的,但不是試圖取代,只是匹配。 Kobi也釘了它。 – 2010-02-28 11:32:42