{"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"dist-tags":{"latest":"0.0.14"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"description":"balanced string matching, and replacing.","readme":"# Balanced [![Build Status](https://travis-ci.org/icodeforlove/node-balanced.png?branch=master)](https://travis-ci.org/icodeforlove/node-balanced)\n\nbalanced string matching, and replacing.\n\n# install\n\n```\nnpm install node-balanced\n```\n\n## example time\n\nlets say you have\n\n```css\n{\n\t@hello 1 {\n\t\ta {\n\t\t}\n\t}\n\t@hello 2 {\n\t\ta {\n\t\t}\n\t}\n\t@hello 3 {\n\t\ta {\n\t\t}\n\t}\n}\n```\n\nand you would like to replace the @hello block easily, balanced allows you to do this\n\n```javascript\nvar balanced = require('node-balanced');\n\nbalanced.replacements({\n\tsource: source,\n\thead: /@hello \\d \\{/, // optional (defalut: open)\n\topen: '{',\n\tclose: '}',\n\tbalance: false, // optional (default: false)\n\texceptions: false, // optional (default: false)\n\treplace: function (source, head, tail) {\n\t\treturn head + source + tail;\n\t}\n});\n```\n\nthis is a simple and efficient way to make balanced replacements, without a parser.\n\n## matching\n\nyou can get balanced matches by doing the following\n\n```javascript\nvar balanced = require('node-balanced');\n\nbalanced.matches({\n\tsource: source,\n\thead: /@hello \\d \\{/, // optional (defalut: open)\n\topen: '{',\n\tclose: '}',\n\tbalance: false, // optional (default: false) when set to true it will return `null` when there is an error\n\texceptions: false // optional (default: false),\n\tignore: [] // array of ignore ranges/matches\n});\n```\n\n## multiple head/open/close\n\nyou can match multiple head/open/close efficiently by doing this\n\n```javascript\nvar isBalanced = balanced.matches({\n\tsource: '{[({)]}}',\n\topen: ['{', '[', '('],\n\tclose: ['}', ']', ')'],\n\tbalance: true\n});\n```\n## ignore\nignore is supported by the `matches` and `replacements` methods, this is very useful for something like not matching inside of comments\n\n```\nvar blockComments = balanced.matches({source: source, open: '/*', close: '*/'}),\n\tsingleLineComments = balanced.getRangesForMatch(source, /^\\s*\\/\\/.+$/gim);\n\nbalanced.matches({\n\tsource: source,\n\thead: /@hello \\d \\{/,\n\topen: '{',\n\tclose: '}',\n\tignore: Array.prototype.concat.call([], blockComments, singleLineComments),\n\treplace: function (source, head, tail) {\n\t\treturn head + source + tail;\n\t}\n});\n```\n\n## advanced\n\nin this example we have code and we want to avoid replacing text thats inside of the multiline/singleline comments, and quotes\n\n```css\n{\n\t@hello 1 {\n\t\ta {\n\t\t}\n\t}\n/*\n\t@hello 2 {\n\t\ta {\n\t\t}\n\t}\n*/\n\t@hello 3 {\n\t\ta {\n\t\t}\n\t}\n// @hello 4 {}\n}\n\nvar hello = \"@hello 5 {}\";\n```\n\nwith balanced you can do this\n\n```javascript\n\t// returns quote ranges with option ignore filter\n\tfunction getQuoteRanges (string, ignore) {\n\t\tvar quotes = balanced.getRangesForMatch(string, new RegExp('\\'|\"', 'g'));\n\t\t\n\t\t// filter out ingored ranges\n\t\tif (ignore) {\n\t\t\tquotes = balanced.rangesWithout(quotes, ignore);\n\t\t}\n\n\t\tvar currect = null,\n\t\t\tranges = [];\n\t\n\t\tquotes.forEach(function (quote) {\n\t\t\tif (currect && currect.match === quote.match) {\n\t\t\t\t\tranges.push({\n\t\t\t\t\t\tindex: currect.index,\n\t\t\t\t\t\tlength: quote.index - currect.index + 1\n\t\t\t\t\t});\n\t\t\t\t\tcurrect = null;\n\t\t\t} else if (!currect) {\n\t\t\t\tcurrect = quote;\n\t\t\t}\n\t\t});\n\n\t\treturn ranges;\n\t}\n\n\tvar blockComments = balanced.matches({source: string, open: '/*', close: '*/'}),\n\t\tsingleLineComments = balanced.getRangesForMatch(string, /^\\s*\\/\\/.+$/gim),\n\t\tignores = Array.prototype.concat.call([], blockComments, singleLineComments),\n\t\tquotes = getQuoteRanges(string, ignores);\n\n\t// remove ignores inside of quotes\n\tignores = balanced.rangesWithout(ignores, quotes);\n\n\t// optional ignore code inside of quotes\n\tignores = ignores.concat(quotes);\n\t\n\t// run your matches or replacements method\n\tbalanced.matches({\n\t\tsource: string,\n\t\thead: /@hello \\d \\{/,\n\t\topen: '{',\n\t\tclose: '}',\n\t\tignore: ignores\n\t});\n```\n\nas you can see by using these principles you can accomplish this kind of stuff easily","repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"users":{"burl.bn":true},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"license":"MIT","versions":{"0.0.0":{"name":"node-balanced","version":"0.0.0","description":"allows you to replace the contents inside of your own balanced constraints.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":"","license":"ISC","_id":"node-balanced@0.0.0","dist":{"shasum":"9cbfe297068c11e1f36bdc57971464ec436d0e4e","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.0.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.1":{"name":"node-balanced","version":"0.0.1","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.1","dist":{"shasum":"692ed6885b93dc0189e774417193c6fd551efa41","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.1.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.2":{"name":"node-balanced","version":"0.0.2","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.2","dist":{"shasum":"048fcf19134ce10bbac83269321d061060da07f5","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.2.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.3":{"name":"node-balanced","version":"0.0.3","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"webpack index.js --output-file dist/balanced-min.js --output-library balanced --optimize-minimize; webpack index.js --output-file dist/balanced.js --output-library balanced"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.3","dist":{"shasum":"8efa33361060355716a8e15349cc655f2cb655c7","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.3.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.6":{"name":"node-balanced","version":"0.0.6","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.6","dist":{"shasum":"4fc811decedd22335b5d51b0fa8af950027a0cb1","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.6.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.7":{"name":"node-balanced","version":"0.0.7","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.7","dist":{"shasum":"6391c3d4f133e9e9d885ec74eba80dea58cb8fa3","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.7.tgz"},"_from":"node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.8":{"name":"node-balanced","version":"0.0.8","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.8","dist":{"shasum":"ce6c7f0ef32b6ce4aee3e5b1741dae14b8be4391","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.8.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.9":{"name":"node-balanced","version":"0.0.9","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.9","dist":{"shasum":"f07f150bbac7824b922ad8412ca1683dff77d7a4","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.9.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.10":{"name":"node-balanced","version":"0.0.10","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.10","dist":{"shasum":"075b9ca17dd80d836d47bfcbe9b2b07ffbf67e20","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.10.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.11":{"name":"node-balanced","version":"0.0.11","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.11","dist":{"shasum":"40089d0be9fe6bd91627bf34ac7b107750fa7b0b","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.11.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.12":{"name":"node-balanced","version":"0.0.12","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.12","dist":{"shasum":"f2e14cb1dd8f69beffe38cffef20e262b38abe97","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.12.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.13":{"name":"node-balanced","version":"0.0.13","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.13","dist":{"shasum":"492365795db7eb571da2c6bbfd40397d03d99c50","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.13.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}},"0.0.14":{"name":"node-balanced","version":"0.0.14","description":"balanced string matching, and replacing.","main":"index.js","scripts":{"test":"grunt test"},"author":{"name":"Chad Scira","email":"chadvscira@gmail.com"},"repository":{"type":"git","url":"git://github.com/icodeforlove/node-balanced.git"},"license":"MIT","devDependencies":{"vows":"~0.7.0","grunt":"~0.4.5","webpack":"~1.3.2-beta9","webpack-dev-server":"~1.4.7","grunt-webpack":"~1.0.7","grunt-contrib-uglify":"~0.5.1","grunt-banner":"~0.2.3","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-jasmine-node":"~0.2.1","grunt-cli":"~0.1.13"},"bugs":{"url":"https://github.com/icodeforlove/node-balanced/issues"},"homepage":"https://github.com/icodeforlove/node-balanced","_id":"node-balanced@0.0.14","dist":{"shasum":"a33c727857d3044f1e88be72dd7d9a9d0b4fc21f","tarball":"http://nexus.dui88.com:8081/nexus/content/repositories/npm-registry/node-balanced/-/node-balanced-0.0.14.tgz"},"_from":"../node-balanced/","_npmVersion":"1.3.21","_npmUser":{"name":"icodeforlove","email":"chadvscira@gmail.com"},"maintainers":[{"name":"icodeforlove","email":"chadvscira@gmail.com"}],"directories":{}}},"name":"node-balanced","time":{"modified":"2014-08-05T09:28:53.365Z","created":"2014-08-01T21:06:50.838Z","0.0.0":"2014-08-01T21:06:50.838Z","0.0.1":"2014-08-01T21:15:02.655Z","0.0.2":"2014-08-01T22:14:17.455Z","0.0.3":"2014-08-01T22:56:47.893Z","0.0.6":"2014-08-02T13:48:20.143Z","0.0.7":"2014-08-02T16:17:59.438Z","0.0.8":"2014-08-03T14:29:48.912Z","0.0.9":"2014-08-03T17:22:37.229Z","0.0.10":"2014-08-03T17:32:46.340Z","0.0.11":"2014-08-04T09:05:47.628Z","0.0.12":"2014-08-04T13:44:17.157Z","0.0.13":"2014-08-04T21:26:59.224Z","0.0.14":"2014-08-05T09:28:53.365Z"},"readmeFilename":"README.md","homepage":"https://github.com/icodeforlove/node-balanced"}