ometa M { start = ( matchingparams | chars )*:t -> ( t.join("") ), chars = anything, matchingparams = '{' ~'}'* '}' -> ( '{}' ) } input = 'function toOpenWindowByType(inType, uri) { var winopts = "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"; window.open(uri, "_blank", winopts); } function jsdump(str , error ){ var console = Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService) /* if( error != undefined ) { var error = new Error(); var scriptError = Components.classes["@mozilla.org/scripterror;1"] .createInstance(Components.interfaces.nsIScriptError); scriptError.init(str, error.fileName, "", error.lineNumber, 0, error, "content javascript" ); console.logStringMessage( scriptError ); } else { */ console.logStringMessage(str); // } } '; M.matchAll(input, "start")