Extract all wordpress shortcode in jQuery object from the wordpress editer whose html id is #content.
This supports same level and hierarchical both.
See in fiddle
jQuery(function() {
var pageContent = jQuery(‘#content’).html();
var data = {};
var data = parseShortCode(pageContent);
console.log(data);
function parseShortCode(shortCode) {
var regex_for_match = /\[([\w-]+)([^]*?)(\/?)\](?:([^]*?)\[\/\1\s*\])?/g;
var count = 0;
var s=[];
while ((singleMatch = regex_for_match.exec(shortCode)) != null) {
//console.log(singleMatch);
innerContent = singleMatch[4];
var re = /(\s+|\W)|(\w+)/g;
var match;
var token;
var curAttribute = ”;
var quoteChar;
var mode = ‘NOT STARTED’;
var parsedValue = {
name: ”,
attributes: {},
content: ”,
parsedContent:”
};
while ((match = re.exec(singleMatch)) != null) {
token = match[0];
switch (mode) {
case ‘NOT STARTED’:
if (token == ‘[‘) {
mode = ‘GETNAME’;
}
break;
case ‘GETNAME’:
if (!(/\s/.test(token))) {
if (token == “]”){
mode = ‘COMPLETE’;
}else{
parsedValue.name += token;
}
} else if (parsedValue.name) {
mode = ‘PARSING’;
}
break;
case ‘PARSING’:
if (token == “]”) { mode = ‘COMPLETE’; }
else if (token == “=”) {
if (!curAttribute) throw (‘invalid token: “‘ + token + ‘” encountered at ‘ + match.index);
else mode = ‘GET ATTRIBUTE VALUE’;
}
else if (!/\s/.test(token)) {
curAttribute += token;
} else if (curAttribute) {
mode = ‘SET ATTRIBUTE’
}
break;
case ‘SET ATTRIBUTE’:
// these are always from match[1]
if (/\s/.test(token)) { parsedValue.attributes[curAttribute] = null; }
else if (token == ‘=’) { mode = ‘GET ATTRIBUTE VALUE’; }
else { throw (‘invalid token: “‘ + token + ‘” encountered at ‘ + match.index); }
break;
case ‘GET ATTRIBUTE VALUE’:
if (!(/\s/.test(token))) {
if (/[“‘]/.test(token)) {
quoteChar = token;
parsedValue.attributes[curAttribute] = ”;
mode = ‘GET QUOTED ATTRIBUTE VALUE’;
} else {
parsedValue.attributes[curAttribute] = token;
curAttribute = ”;
mode = ‘PARSING’;
}
}
break;
case ‘GET QUOTED ATTRIBUTE VALUE’:
if (/\\/.test(token)) { mode = ‘ESCAPE VALUE’; }
else if (token == quoteChar) {
mode = ‘PARSING’;
curAttribute = ”;
}
else { parsedValue.attributes[curAttribute] += token; }
break;
case ‘ESCAPE VALUE’:
if (/\\'”/.test(token)) { parsedValue.attributes[curAttribute] += token; }
else { parsedValue.attributes[curAttribute] += ‘\\’ + token; }
mode = ‘GET QUOTED ATTRIBUTE VALUE’;
break;
case ‘COMPLETE’:
parsedValue.content = innerContent;
parsedValue.parsedContent = parseShortCode(innerContent);
break;
}/*endwsitch*/
}/*endwhile*/
if (curAttribute && !parsedValue.attributes[curAttribute]) {
parsedValue.attributes[curAttribute] = ”;
}
s.push(parsedValue);
count++;
//console.log(parsedValue);
}
return s;
}/* END parseShortCode */
});
</script>