/// Helper functions to performantly transform strings, without `RegExp`. library angel3_route.string_util; /// Removes leading and trailing occurrences of a pattern from a string. String stripStray(String haystack, String needle) { int firstSlash; if (haystack.startsWith(needle)) { firstSlash = haystack.indexOf(needle); if (firstSlash == -1) return haystack; } else { firstSlash = -1; } if (firstSlash == haystack.length - 1) { return haystack.length == 1 ? '' : haystack.substring(0, firstSlash); } // Find last leading index of slash for (var i = firstSlash + 1; i < haystack.length; i++) { if (haystack[i] != needle) { var sub = haystack.substring(i); if (!sub.endsWith(needle)) return sub; var lastSlash = sub.lastIndexOf(needle); for (var j = lastSlash - 1; j >= 0; j--) { if (sub[j] != needle) { return sub.substring(0, j + 1); } } return lastSlash == -1 ? sub : sub.substring(0, lastSlash); } } return haystack.substring(0, firstSlash); } String stripStraySlashes(String str) => stripStray(str, '/'); String stripRegexStraySlashes(String str) => stripStray(str, '\\/');