import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?:[\\s]+)?(?:const|let|var|)?(?:[a-z0-9.]+(?:\\.prototype)?)?(?:\\s)?(?:[a-z0-9-_\\{\\}:\\s]+\\s?=)?\\s?(?:[a-z0-9]+\\s+\\:\\s+)?(?:function\\s?)?(?:[a-z0-9_-]+)?\\s?\\(.*\\)\\s?(?:.+)?([=>]:)?\\{(?:(?:[^\\}\\{]+|\\{(?:[^\\}\\{]+|\\{[^\\}\\{]*\\})*\\})*\\}(?:\\s?\\(.*\\)\\s?\\)\\s?)?)?(?:\\;)?$";
final String string = "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n\n\n"
+ "const a = {\n"
+ " apples() {\n\n"
+ " },\n"
+ " apples2 : function() {\n"
+ " },\n"
+ " apples3 : () => {\n"
+ " }\n"
+ "}\n\n"
+ "function(){}\n\n"
+ "function() {}\n\n"
+ "function() { }\n"
+ "function () { }\n"
+ "function (arg, asdf) { }\n"
+ "function (arg, asdf):Typings { }\n"
+ "function (arg, asdf):something<Else> { }\n\n"
+ "function () { }\n"
+ "const x = function () { }\n"
+ "const { x } = function () { }\n\n"
+ "const { x: asdf } = function () { }\n\n"
+ "const filterFn = () => {}\n\n"
+ "// won't grab\n"
+ "const filterFn = apples.filter(() => {});\n"
+ "// won't grab\n"
+ "const filterFn = apples.filter(function(){});\n\n\n\n"
+ "class Bla {\n"
+ " constructor() {\n"
+ " }\n"
+ " someMethod1() {\n"
+ " }\n"
+ " someMethod2() => {\n"
+ " }\n"
+ " get someMethod3() {\n"
+ " }\n"
+ "}\n\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "HoverBoard.prototype.getFormatValueIfExists = function (prop, defaultValue) {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "const getFormatValueIfExists = function (prop, defaultValue) {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ " var getFormatValueIfExists = (prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "window.x = (prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "something.else.x = (prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "var x = null;\n"
+ "x = (prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "function getFormatValueIfExists(prop, defaultValue) {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "function (prop, defaultValue) {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "(prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "};\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "((prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "}());\n\n\n\n\n"
+ "/**\n"
+ " * @function\n"
+ " * @description simple method that tries to retrieve a config value from the format\n"
+ " * if it exists, else it will return the second argument as the default value.\n"
+ " * @param {string} prop - the prop name to retrieve\n"
+ " * @param {any} defaultValue - the value to use if we can't extract from the format\n"
+ " * @returns {any} - the default value or extracted format value\n"
+ " */\n"
+ "((prop, defaultValue) => {\n"
+ " try {\n"
+ " return typeof this.config.formats[this.name][prop] !== 'undefined' ? this.config.formats[self.name][prop] : defaultValue;\n"
+ " } catch (e) {\n"
+ " return defaultValue;\n"
+ " }\n"
+ "} (window) );\n\n";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html