Helper function for split keep. Reference:
https://medium.com/@shemar.gordon32/how-to-split-and-keep-the-delimiter-s-d433fb697c65
String.prototype.splitKeep = function (tokens) {
const escaped = escapeRegExp(tokens);
return this.split(new RegExp(`(?=[${escaped}])|(?<=[${escaped}])`, 'g'));
};
// Not built-in yet https://github.com/tc39/proposal-regex-escaping
// Use a good one for the meantime https://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
function escapeRegExp(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
Add this when using TypeScript:
declare global {
interface String {
splitKeep(tokens: string): string[];
}
}
November 14
For browsers that the regex component don't have
lookbehind capability yet, use match method:
String.prototype.splitKeep = function (tokens) {
const tokensEscaped = tokens
.split('')
.map((s) => escapeRegExp(s))
.join('|');
const wordMatch = `[^${escapeRegExp(tokens)}]+`;
return this.match(new RegExp(tokensEscaped + '|' + wordMatch, 'g'));
};
No comments:
Post a Comment