Grunt plugin to search and replace text content of files based on regular expression patterns
Install this grunt plugin next to your project's grunt.js gruntfile with:
npm install --save-dev grunt-regex-replace
Then add this line to your project's grunt.js
gruntfile:
grunt.loadNpmTasks('grunt-regex-replace');
Here is an sample of the definition within the object passed to grunt.initConfig
###Sample Code
"regex-replace": {
foofoo: { //specify a target with any name
src: ['foo/bar.js'],
actions: [
{
name: 'bar',
search: '(^|\\s)console.log',
replace: '//console.log',
flags: 'g'
},{
name: 'foo',
search: 'var v = \'[^\']*\';',
replace: 'var v = \'<%= pkg.release.version_code %>\';',
flags: ''
},{
name: 'foobar',
search: new RegExp('\\w+'),
replace: function() {
return 'foofoo';
}
}
]
}
}
Takes the path to the files relative to the grunt file, it accepts strings as well as an array of file paths. Also supports templates, e.g
src: 'customisation/*.js',
src: '**/*.js',
src: ['foo/bar.js','foo/foo.js'],
src: ['<%= pkg.id %>/bar.js', 'foo/foo.js']
Accepts an array of objects or a function (which returns an array of objects) representing the actions to take place. Each action contains an optional name property, a search property, a replace property and a flags property. Here are some examples of the object.
{
name: 'foo',
search: '(^|\\s)console.log',
replace: '//console.log',
flags: 'gi'
}
{
name: 'bar',
search: /\\w+/g, //also accepts new RegExp()
replace: function() {
return 'foo';
}
}
A string value
A regular expression string or object defining the text content to be found.
A string / regular expression pattern or function to replace the text content. For the replace function, values that match the parenthesized substring matches are passed as arguments
{
search: new RegExp(/(\w+)\s(\w+)/),
replace: function(arg1, arg2, ... argN) {
// arg1 is the full string matched
// arg2 is the first parenthesized substring match
// argN is the Nth parenthesized substring match
}
}
See MDN Documentation for details on "using parenthesized substring matches."
Regular expressions options (ie gmi
). If the flags property is not defined, and the search property is a string, it defaults to 'g'
. To specify no options, set the flags to empty string (ie flags : '').
Note: Do not use the flags
property if a regexp
was used for the search property. Instead, use the flag(s) in your regex. ie: /^[a-z0-9_-]{6,18}$/g
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.
v0.1.0 - First Release
v0.1.1 -
v0.1.2 - Changes to readme
v0.2.1 - Updated to support grunt 0.4.x
v0.2.2 - version fixes
v.0.2.3 - task format fixes for compatibilty with 0.4.0 ,
v.0.2.4 - added name property, search property now supports regexp object, replace property now supports functions.
v.0.2.5 - fix /bin not exist error
v.0.2.6 - Support for file globbing patterns.
v.0.2.7 - Support for passing a function to the action property, Updated documentation for using parenthesized substring matches
v.0.2.9 - Clarification for regex flags usage