Last active
August 29, 2015 14:11
-
-
Save welll/7f7fa578d0539ed5c275 to your computer and use it in GitHub Desktop.
NodeJS - Function to Replace a Text Block
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* This function will replace the content inside | |
* the commentary "setupVars" | |
* | |
* Param: | |
* content: the input string, e.g, a entire HTML file | |
* data: snippet to be included | |
* | |
* <html> | |
* <body> | |
* ...... | |
* <!-- setupVars --> | |
* THIS CONTENT WILL BE REPLACED | |
* <!-- /setupVars --> | |
* .... | |
* .... | |
* </body> | |
* </html> | |
* | |
*/ | |
var Helper = function(content, snippet) { | |
/* | |
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match | |
Brackets | |
Brackets are used to find a range of characters: | |
Expression Description | |
[abc] Find any character between the brackets | |
[^abc] Find any character NOT between the brackets | |
[0-9] Find any digit between the brackets | |
[^0-9] Find any digit NOT between the brackets | |
(x|y) Find any of the alternatives specified | |
Metacharacter Description | |
. Find a single character, except newline or line terminator | |
\w Find a word character | |
\W Find a non-word character | |
\d Find a digit | |
\D Find a non-digit character | |
\s Find a whitespace character | |
\S Find a non-whitespace character | |
\b Find a match at the beginning/end of a word | |
\B Find a match not at the beginning/end of a word | |
\0 Find a NUL character | |
\n Find a new line character | |
\f Find a form feed character | |
\r Find a carriage return character | |
\t Find a tab character | |
\v Find a vertical tab character | |
\xxx Find the character specified by an octal number xxx | |
\xdd Find the character specified by a hexadecimal number dd | |
\uxxxx Find the Unicode character specified by a hexadecimal number xxxx | |
Quantifiers | |
Quantifier Description | |
n+ Matches any string that contains at least one n | |
n* Matches any string that contains zero or more occurrences of n | |
n? Matches any string that contains zero or one occurrences of n | |
n{X} Matches any string that contains a sequence of X n's | |
n{X,Y} Matches any string that contains a sequence of X to Y n's | |
n{X,} Matches any string that contains a sequence of at least X n's | |
n$ Matches any string with n at the end of it | |
^n Matches any string with n at the beginning of it | |
?=n Matches any string that is followed by a specific string n | |
?!n Matches any string that is not followed by a specific string n | |
*/ | |
var regbuild = /<!--\s*setupVars\s*-->/; | |
// end build pattern -- <!-- /setupVars --> | |
var regend = /<!--\s*\/setupVars\s*-->/; | |
var lines = content.replace(/\r\n/g, '\n').split(/\n/), | |
insideBlock = false, | |
populated = false; | |
linesReconstructed = []; | |
lines.forEach(function(l) { | |
if (insideBlock) { | |
var endbuild = regend.test(l); | |
if (endbuild) { | |
var setupVars = " \n" + snippet + "\n"; | |
linesReconstructed.push(setupVars); | |
populated = true; | |
insideBlock = false; | |
} else { | |
//discard lines | |
} | |
} else { | |
/* Document - Start */ | |
if (!populated) { | |
var build = regbuild.test(l); | |
if (build) | |
insideBlock = true; | |
else | |
linesReconstructed.push(l); | |
} else { | |
linesReconstructed.push(l); | |
} | |
} | |
}); | |
return linesReconstructed.join('\n'); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment