JSFiddle - React, Tailwind, and code Playground
by ikbelkirasan
HTML
<input type="text" id="segment" value="Under 21 (16-20)">
<button id="submit">Get segment</button>
<br>
<span>Result: </span><b id="result"></b>
JavaScript
function extractSegment(str) {
var regex = /\d+\s*-\s*\d+/;
const getSegment = (str) => {
let pattern = new RegExp(regex);
let isValid = pattern.test(str);
if (!isValid) {
return null;
}
let ages = str.split("-");
let currentYear = new Date().getFullYear();
return {
min: `01/01/${currentYear - ages[0]}`,
max: `01/01/${currentYear - ages[1]}`,
minAge: ages[0],
maxAge: ages[1]
};
}
var m;
let result = m = regex.exec(str);
if (result) {
return getSegment(m[0]);
}
return null;
}
var segment = document.querySelector("#segment");
var button = document.querySelector("#submit");
var result = document.querySelector("#result");
button.addEventListener("click", function() {
result.innerText = JSON.stringify(getAgeCriteria(segment.value, '16+'));
});
function getAgeCriteria(str, label) {
let range = extractSegment(str);
let name = label || `${range.minAge} - ${range.maxAge}`;
return {
name: `Age Range | ${name}`,
criteria: `[
"and",
[
"and",
[
"member_field:max-age-birth-year",
"lt",
"${range.min}"
],
[
"member_field:max-age-birth-year",
"gt",
"${range.max}"
]
],
[
"and",
[
"member_field:min-age-birth-year",
"lt",
"${range.min}"
],
[
"member_field:min-age-birth-year",
"gt",
"${range.max}"
]
]
]`
};
}
function getNameSegment(str, label) {
return {
name: `Name | No name`,
criteria: `[
"and",
[
"and",
[
"member_field:first_name",
"eq",
"Unknown"
]
],
[
"and",
[
"member_field:last_name",
"eq",
"Unknown"
]
]
]
`
};
}