(function() { var BREAK = "​"; /** A class for intelligently breaking up strings at logical points. **/ var BreakString = function(string) { this.string = string; }; BreakString.prototype.break = function(hint) { var hintPos = [], str = this.string; if(hint) { hint = hint.toLowerCase().split(/\s+/).reverse(); var current = 0; while(hint.length > 0) { var word = hint.pop(); if(word !== str.substr(current, word.length).toLowerCase()) { break; } current += word.length; hintPos.push(current); } } var rval = [], prev = str[0]; rval.push(prev); for (var i=1;i1 && prev.match(/[A-Z]/) && cur.match(/[a-z]/)){ rval.pop(); rval.push(BREAK); rval.push(prev); } else if(prev.match(/[^A-Za-z0-9]/) && cur.match(/[a-zA-Z0-9]/)){ rval.push(BREAK); } else if(hintPos.indexOf(i) > -1) { rval.push(BREAK); } rval.push(cur); prev = cur; } return rval.join(""); }; this.BreakString = BreakString; }).call(this);