Grep.js

Inspired by a client project with thousands of lines of poorly structured, badly written ExtJS code, I wrote a grep implementation to recursively search the contents of Javascript variables, available on github.

This provides a single function “grep”, which can be used directly or added to the global namespace. It recursively searches objects – keys, values, arrays and functions – for values matching a regular expression. It does a breadth-first search, stopping after a number of entries.It returns a stringified versions of the variable name and value, so you can see exactly what you’d need to write to get the desired value. e.g:

Tests

var lib = ...contents of grep.js...
lib.test();

testTopLevelArray: Passed
testSubLevelArray: Passed
testInt: Passed
testString: Passed
testRecursion: Passed
testObject: Passed
testSubObject: Passed
testFunction: Passed
testWindow: Passed
testRemoveTopLevel: Passed
testRemoveTopLevel: Passed
testRemoveSecondLevel: Passed
testRemoveSecondLevel: Passed
testKeys: Passed
testValues: Passed

Installation

You can call lib.grep directly, or call install to place it in the global namespace:

lib.install();

Examples

Since “document” is a global, grep returns values you can use to access the results:

grep("document", "location")

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

grep("document", "location").keys()

[“document.location”, “document.location.assign”, “document.location.replace”, “document.location.reload”, “document.location.ancestorOrigins”, “document.location.origin”, “document.location.hash”, “document.location.search”, “document.location.pathname”, “document.location.port”]

grep("document", "location$").keys();

[“document.location”, “document.defaultView.location”, “document.activeElement.ownerDocument.location”, “document.head.ownerDocument.location”, “document.body.ownerDocument.location”, “document.defaultView.top.location”, “document.defaultView.window.location”, “document.defaultView.document.location”, “document.defaultView.Modernizr.geolocation”, “document.documentElement.classList.7”]

grep("document", "location$").values()

[“https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “https://github.com/garysieling/grep-js/blob/master/search/grep.js”, “true”, “geolocation”]

Get it on github, here.

One Reply to “Grep.js”

  1. I get this in Chrome:
    TypeError: Accessing selectionDirection on an input element that cannot have a selection.

    grep(‘document’, ‘subview’)

Leave a Reply

Your email address will not be published. Required fields are marked *