cancel
Showing results for 
Search instead for 
Did you mean: 

Map expression regex

JensDeveloper
Contributor II

Hi,

A simple one for the people that are expert in regex. I’m still learning it.
So, I have a key: notes that contains a value : #IF:SLG-01-SL + some text here”

My goal is to always get the 9 characters after an #IF:
My expression I tried in the regex and works: ([#IF:])(.{0,12})
But how do I put it into a mapper?
First i check whether the notes contains ‘#IF:’ if thats true it goes to the path where i need to do the regex in the mapper

$notes.replace($notes, /([#IF:])(.{0,12})/g)
but now it gives the string of the regex.

image

Regards

Jens

1 ACCEPTED SOLUTION

koryknick
Employee
Employee

It’s the newline character in the string that is causing the issue. The dot notation for character matching in regex does not match newlines. After a bit of thought, we can also simplify the result by using the regex group capture syntax. Try this:

$notes.replaceAll('\n','').replace(/.*#IF:(.{9}).*/g, '$1')

View solution in original post

6 REPLIES 6

siwadon
Employee
Employee

$notes.replace(/.*(#IF:.{9}).*/, (...args) => args[1])

It replaces the matched string with the first capture group (#IF: and the following 9 characters).

This will not work correctly when the input contains multiple matches. If that’s the case, please let me know. You might need to use .match() instead.

koryknick
Employee
Employee

I don’t think you need to use .match() - but a slight update to @siwadon’s solution might resolve multiples within the notes:

$notes.replace(/.*(#IF:.{9}).*/g, (...args) => args[1].slice(-9))

The “g” at the end of the pattern tells it to search the string globally. The slice(-9) will give only the 9 characters following the #IF. Multiple matches are separated with a \n (newline) character.

Hi,
I tested both but it still shows text after the nine characters. on the second one. Is it because thats a new line of text?
image

koryknick
Employee
Employee

It’s the newline character in the string that is causing the issue. The dot notation for character matching in regex does not match newlines. After a bit of thought, we can also simplify the result by using the regex group capture syntax. Try this:

$notes.replaceAll('\n','').replace(/.*#IF:(.{9}).*/g, '$1')