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 a sample of the definition within the object passed to grunt.initConfig
"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';
}
},{
name: 'baz',
use: function(data) {
return data.sourceContent.length > 3;
},
search: 'abc',
replace: 'abcde'
}
]
}
}
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']
Takes a file path string or an array of file paths that match the src paths. If a dest
file is specified for the corresponding
src
file, the src
file remains unchanged and the changes are applied to the dest
file. e.g
bla.js
will not be overwritten butfoo.js
will contain the new changes.
{
src: ['bla.js'],
dest: 'foo.js'
}
bla.js
andfoo.js
will be affected as above.baz.js
will be overwritten.
{
src: ['bla.js', 'baz.js'],
dest: ['foo.js']
}
bla.js
andfoo.js
will be affected as above.baz.js
will be ignored.
{
src: ['bla.js'],
dest: ['foo.js', 'baz.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, an optional use
property, a search
property, a replace
property and
an optional flags
property. Here are some examples of the object.
{
name: 'foo',
use: function(data) {
return data.file.indexOf('.skip') === -1 && data.sourceContent.indexOf('console.log') > -1;
}, //also accepts a template string or any value
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.
Default: true
Used to determine whether the corresponding action should be executed or not. If set to true
the action executes,
if false
it does not. Can also be a function which returns a value, a template string producing a value.
It enables specifying the conditions for when actions are used.
An object with the following fields is passed in test function:
file
- path to a file that is being processed;sourceContent
- source contents of the processed file;updatedContent
- contents of the file after previously applied actions;action
- object that is representing options of the current action;task
- reference to the corresponding task;grunt
- reference to grunt.
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
specify --verbose
as a command-line option to show detailed logs
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.4.0
- added support fordest
propertyv0.3.0
- added newuse
property toactions
, removed peerDependencies restrictionsv0.2.10
- add verbose loggingv0.2.9
- Clarification for regex flags usagev0.2.7
- Support for passing a function to the action property, Updated documentation for using parenthesized substring matchesv0.2.6
- Support for file globbing patterns.v0.2.5
- fix /bin not exist errorv0.2.4
- added name property, search property now supports regexp object, replace property now supports functions.v0.2.3
- task format fixes for compatibilty with 0.4.0.v0.2.2
- version fixesv0.2.1
- Updated to support grunt 0.4.xv0.1.2
- Changes to readmev0.1.1
-v0.1.0
- First Release
Copyright (c) 2012 Hubert Boma Manilla
Licensed under the MIT license.