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')