aboutsummaryrefslogtreecommitdiff
path: root/Functions/stringFuncs.js
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/stringFuncs.js')
-rw-r--r--Functions/stringFuncs.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/Functions/stringFuncs.js b/Functions/stringFuncs.js
new file mode 100644
index 0000000..8dddc75
--- /dev/null
+++ b/Functions/stringFuncs.js
@@ -0,0 +1,51 @@
+function replaceElement(source, element, value) {
+ const firstTag = `<${element}>`;
+
+ const firstSpace = element.indexOf(" ");
+ if (firstSpace !== -1)
+ element = element.substring(0, firstSpace);
+ const startTag = `<${element}.*?>`;
+ const endTag = `</${element}.*?>`;
+
+ const span = getTagSpan(source, [startTag, endTag], firstTag);
+
+ return source.substring(0, span[0]) +
+ value +
+ source.substring(span[1]);
+}
+
+function getTagSpan(s, tags=["\\(", "\\)"], customFirstTag=undefined)
+{
+ customFirstTag = new RegExp(customFirstTag || tags[0]);
+ let i = s.search(customFirstTag);
+ if (i === -1)
+ return s;
+
+ tags = [
+ new RegExp("^" + tags[0]),
+ new RegExp("^" + tags[1])
+ ];
+
+ const start = i;
+ i++;
+ let depth = 1;
+ while((depth !== 0) && (i !== s.length))
+ {
+ let maybeStartTag = s.substring(i);
+ let maybeEndTag = s.substring(i);
+
+ depth += +tags[0].test(maybeStartTag) + -tags[1].test(maybeEndTag);
+
+ i++;
+ }
+
+ i += (s.substring(i - 1).match(tags[1]) || [""])[0] .length - 1;
+ return [start, i];
+}
+
+const countOccurrences = (s, regex) => (s.match(regex) || []).length;
+module.exports = {
+ span: getTagSpan,
+ replaceElement: replaceElement,
+ count: countOccurrences
+} \ No newline at end of file