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
						 +...