Detect and (recursively) remove head and tail wrappings around the input string

§ Quick Take

import { strict as assert } from "assert";
import removeDuplicateHeadsTails from "string-remove-duplicate-heads-tails";

    "{{ Hi {{ first_name }}! }}",
      heads: "{{ ",
      tails: " }}",
  "Hi {{ first_name }}!"

§ The Purpose

Let's say, you know that variables are wrapped with heads, for example, {{ and tails, }}.

For example:

"Hi {{ first_name }}!"

This library detects and deletes redundant heads and tails wrapped around the whole input string:

"{{ Hi {{ first_name }}! }}" => "Hi {{ first_name }}!"

But it's also smart and detects legit heads and tails at the edges of string:

:exclamation: {{ first_name }} {{ last_name }} is not turned into first_name }} {{ last_name.

That's what this library is mainly about — being able to detect, are outer heads and tails currently wrapping a single chunk of text, or are those heads and tails from separate chunks.

Also, this lib removes the leading/trailing empty clumps of empty heads/tails, with or without empty space:

// without whitespace:
`{{}}{{}} {{}}{{}} {{}}{{}} a {{}}{{}}` => `a`
// with whitespace:
`{{ \n }} \t a \n\n {{ \n\n \n\n }} \t\t` => `a`

You can configure heads and tails to be whatever you like, single string or array of them. Also, the length of the different heads in your given set can be different.


removeDuplicateHeadsTails(str, [opts]);

§ API - Input

Input argumentTypeObligatory?Description
strStringyesSource string upon which to perform the operation
optsPlain objectnoOptional Options Object, see below for its API

If input string is not given, it will throw.

§ An Optional Options Object

Optional Options Object's keyType of its valueDefaultDescription
headsNon-empty string or array of one or more non-empty strings[']Put here the way you mark the beginnings of your variables in a string.
tailsNon-empty string or array of one or more non-empty strings[']Put here the way you mark the endings of your variables in a string.

These double curlies are default for Nunjucks opens in a new tab/Jinja and many other templating languages. Nunjucks is my favourite.

§ API - Output

Returns a string

§ Licence

MIT opens in a new tab

Copyright © 2010–2020 Roy Revelt and other contributors

Related packages:

📦 detergent 5.11.7
Extracts, cleans and encodes text
📦 string-collapse-white-space 5.2.31
Efficient collapsing of white space with optional outer- and/or line-trimming and HTML tag recognition
📦 string-left-right 2.3.31
Looks up the first non-whitespace character to the left/right of a given index
📦 string-process-comma-separated 1.2.14
Extracts chunks from possibly comma or whatever-separated string
📦 string-extract-class-names 5.9.32
Extract class (or id) name from a string
📦 string-collapse-leading-whitespace 3.0.2
Collapse the leading and trailing whitespace of a string
📦 string-remove-thousand-separators 3.0.72
Detects and removes thousand separators (dot/comma/quote/space) from string-type digits