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"
        ]
      ]
    ]
    
    `
  };
}