jslt icon indicating copy to clipboard operation
jslt copied to clipboard

builtin function `replace` does not support positional patterns

Open catull opened this issue 1 year ago • 1 comments

In issue https://github.com/schibsted/jslt/issues/340 I had to resort to 2 nested replace calls.

replace (
    replace (text, ",]", ]),
    ",}", "}
)

I wanted to collapse the two nested calls into one. Both patterns start with ,, one ends with }, while the other ends in ].

It would be great if this was supported:

replace (input, ",([}\])", "$1")

This way, ,} would result in }, and ,] would become ']'.

Or think of the eternal battle of date formats, ISO vs US format vs European.

def isoDateToUS (date)
  replace (date, "(\d\d\d\d)-(\d\d)-(\d\d)", "$2/$3/$1"

def isoDateToEuropean (date)
  replace (date, "(\d\d\d\d)-(\d\d)-(\d\d)", "$3/$3/$1"

I am not going to suggest that this be supported in this issue:

def isoToUSformat (date)
  replace (date, "(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})", "${month}/${day}/${year}")

catull avatar May 23 '24 17:05 catull

This issue can be seen as an extension of #346, I realize it now.

catull avatar May 23 '24 18:05 catull