Skip to content

Instantly share code, notes, and snippets.

@shadeglare
Created October 21, 2013 08:01
Show Gist options
  • Save shadeglare/7080180 to your computer and use it in GitHub Desktop.
Save shadeglare/7080180 to your computer and use it in GitHub Desktop.
var parsePattern = function(pattern) {
var placeholders = [];
var substrings = [];
var putSubstring = function(startPosition, endPosition, isPlaceholder) {
var substring = pattern.substring(startPosition, endPosition);
if (substring.length > 0) {
substrings.push(substring);
if (isPlaceholder) {
placeholders.push(substrings.length - 1);
}
}
};
var currentPlaceholderState = false;
var previousPlaceholderState = false;
var startPosition = 0;
var endPosition = 0;
for (var i = 0; i < pattern.length; i++) {
var letter = pattern[i];
var isOpenBraceLetter = letter === '{';
var isCloseBraceLetter = letter === '}';
var isBraceLetter = isOpenBraceLetter || isCloseBraceLetter;
var isEndLetter = i === pattern.length - 1;
if (isBraceLetter) {
currentPlaceholderState = isOpenBraceLetter;
if (currentPlaceholderState != previousPlaceholderState) {
putSubstring(startPosition, endPosition, previousPlaceholderState);
previousPlaceholderState = currentPlaceholderState;
startPosition = i + 1;
}
} else if(isEndLetter) {
endPosition = pattern.length;
putSubstring(startPosition, endPosition, previousPlaceholderState);
} else {
endPosition = i + 1;
}
}
return {
placeholders: placeholders,
substrings: substrings
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment