Replace sub strings and add wrappers
by lmeurs
JavaScript
var string = " plop.uppercase(\"is 't ok?'\", 123, 'j\\'a\"ja') && asd && asd.uppercase && asd.uppercase()";
var string = " asd && asd.uppercase && asd.uppercase() ";
var asd = replaceSubStrings(string);
var stringWithPlaceholders = asd.string;
var stringReplacements = asd.replacements;
var stringWithPlaceholdersAndWrapper = addWrappers(stringWithPlaceholders);
console.log(stringWithPlaceholdersAndWrapper);
function replaceSubStrings(string) {
var subStringPositions = find(string);
/* console.log(subStringPositions); */
var asd = replace(string, subStringPositions);
/* console.log(asd); */
return asd;
function find(string) {
var curChar = '',
curCharMinus1 = '',
curCharMinus2 = '',
subStringDelimiter = '',
subStringStart = 0,
positions = [];
for (var i=0; i<string.length; i++) {
curCharMinus2 = curCharMinus1;
curCharMinus1 = curChar;
curChar = string[i];
// If current character is a quote character.
if ((curChar == '\'' || curChar == '"') && !(curCharMinus2 != '\\' && curCharMinus1 == '\\')) {
if (!subStringDelimiter) {
subStringDelimiter = curChar;
subStringStart = i;
}
else {
if (curChar != subStringDelimiter) {
continue;
}
positions.push({
type: subStringDelimiter,
start: subStringStart,
end: i+1
});
// Reset string delimiter.
subStringDelimiter = null;
}
}
}
return positions;
}
function replace(string, positions) {
var replacements = {},
placeholder,
substring;
// ...
for (var i=positions.length-1; i>=0; i--) {
// Define placeholder and sub string and add replacement to associative array.
placeholder = '___STRINGREPLACEMENTS___[' + i + ']';
subString = string.substring(positions[i].start+1, positions[i].end-1);
replacements[i] = subString;
// Replace sub string for placeholder
string = string.substring(0, positions[i].start)
+ placeholder
+...