6

I construyó esta expresión regular en http://regextester.com para analizar YSOD pero VS se queja de un error de sintaxis. Estoy seguro de que me estoy perdiendo un escape en alguna parte, pero me estoy quedando en blanco.YSOD pantalla amarilla de la muerte JavaScript RegExp - Error de sintaxis

Aquí está en su forma original. cualquier ayuda es apreciada

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

ACTUALIZACIÓN: Kobi señaló lo obvio y me puso a moverse de nuevo. Para aquellos que estén interesados, este es un JavaScript válido para probar y analizar un XMLHttpRequest.responseText para una Pantalla amarilla de la muerte de ASP.net (YSOD).

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 - Este es el resultado y la razón por la que quiero analizar el html a pesar de que tengo un 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

¿No obtendrás también el código de estado '500 Internal Server Error' para estas pantallas? ¡En fin, buena suerte! – Kobi

+0

@Kobi, sí, claro que sí. Es por eso que estoy analizando la página ya que tiene la excepción real. Nada que odio es un mensaje de excepción de catch all cuando la información está realmente disponible. –

Respuesta

4

Firefox dice:

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

Después de la eliminación de la s parece estar bien (por supuesto, no está probado, simplemente analizado correctamente).

+0

Para el registro: Ctrl + Shift + J da la consola de error. – Kobi

+0

gracias. esta es una de esas noches en las que mi comprensión de lo obvio se filtró por mi oído alrededor de la medianoche. –

+0

r.e. CTRL + SHFT + J - Sí, lo uso bastante. Trabajo en un montón de código intelisense de JavaScript ... –

2

La bandera s no es válido en Javascript. Para reemplazar, use el método replace.

+0

gracias, marca. tienes razón, pero no tratas de reemplazar, solo coinciden. Kobi también lo clavó. –

Cuestiones relacionadas