just-exercise-parser
Version:
A TypeScript library for parsing, normalizing, and generating standardized exercise names
567 lines (566 loc) • 15.4 kB
JSON
{
"templates": {
"standard": "${special} ${equipment} ${positions} ${modifiers} ${variations} ${others} ${movements} ${version}",
"minimal": "${equipment} ${movements}",
"equipment_focus": "${equipment} ${variations} ${movements}"
},
"components": {
"special": [
"alternating",
"pregnancy"
],
"positions": [
"in-place",
"standing",
"floor",
"seated",
"(?:side\\W+lying|lying\\W+side|lying|side)",
"incline",
"decline",
"flat",
"(?:half\\W+)?kneeling",
"prone",
"supine",
"(?:split\\W)stance"
],
"variations": [
"unilateral",
"bilateral",
"(?:wide|narrow|underhand|overhand|hammer|close|reverse|neutral|parallel|conventional|hook|standard|stance|snatch|grip)(?:\\W+(?:wide|narrow|underhand|overhand|hammer|close|reverse|neutral|parallel|conventional|standard|stance|snatch|grip)){0,3}\\b(?!.*?\\bcurl\\b)",
"sumo",
"deficit",
"elevated",
"slow",
"paused",
"tempo",
"explosive",
"isometric",
"eccentric"
],
"modifiers": [
"(?:single\\W+)leg",
"(?:single\\W)arm",
"weighted",
"assisted",
"banded",
"chained",
"partial",
"(?:full(?:\\W(?:range|rom))?)(?!.*?curl)",
"strict",
"kipping",
"bulgarian",
"romanian",
"hack",
"jefferson",
"goblet",
"zercher"
],
"equipment": [
"(?:stability|exercise)\\W+ball",
"barbell",
"(?:bench(?!\\W+(?:press|pull|dip|squat)))",
"bottle\\W+weight",
"(?:captain'?s?\\W+)?chair",
"stool",
"suspender",
"box",
"trx",
"dumbbell",
"kettlebell",
"cable",
"(?:resistance|loop|band){2}",
"loop",
"band",
"bodyweight",
"(?:smith\\W+)?machine",
"(?:trap|ez)\\W+bar",
"(?:medicine\\W+)ball",
"(?:long\\W+|short\\W+)?lever"
],
"bodyParts": [
"chest",
"back",
"shoulder",
"bicep",
"tricep",
"quad",
"hamstring",
"glute",
"calf",
"core",
"abs",
"oblique",
"hip",
"forearm",
"trap",
"deltoid",
"lat"
],
"movements": [
"(?:half|deep)?(?:\\W+)?squat",
"(?:romanian)?(?:\\W+)?deadlift",
"(?:push\\W?)(?:pull)",
"press",
"row",
"curl",
"extension",
"(?:calf\\W+)?(?:[a-z]{1,2}\\W+)?raise",
"fly",
"jump",
"lunge",
"crunch",
"twist",
"(?:plank)(?:\\W+position)?",
"hold",
"stretch"
],
"version": [
"version \\[.*\\]",
"version (?:i{1,3}|iv|v|vi{1,3}|ix|x)",
"anjaneyasana (?:i{1,3}|iv|v|vi{1,3}|ix|x)"
],
"others": []
},
"replacements": [
{
"pattern": "[^\\w™&+']+",
"replacement": " "
},
{
"pattern": "\\bdb\\b",
"replacement": "dumbbell"
},
{
"pattern": "\\bbb\\b",
"replacement": "barbell"
},
{
"pattern": "\\bkb\\b",
"replacement": "kettlebell"
},
{
"pattern": "\\brbs?\\b",
"replacement": "resistance-band"
},
{
"pattern": "\\bresistance\\W+bands?\\b",
"replacement": "resistance-band"
},
{
"pattern": "\\bloop\\W+bands?\\b",
"replacement": "loop-band"
},
{
"pattern": "\\bw\\W+raises?\\b",
"replacement": "w-raise"
},
{
"pattern": "\\by\\W+raises?\\b",
"replacement": "y-raise"
},
{
"pattern": "\\byw\\W+raises?\\b",
"replacement": "yw-raise"
},
{
"pattern": "\\bsb\\b",
"replacement": "stability ball"
},
{
"pattern": "\\bmb\\b",
"replacement": "medicine ball"
},
{
"pattern": "\\brom\\b",
"replacement": "range-of-motion"
},
{
"pattern": "\\bohps?\\b",
"replacement": "overhead press"
},
{
"pattern": "\\bdls?\\b",
"replacement": "deadlift"
},
{
"pattern": "\\brdls?\\b",
"replacement": "romanian deadlift"
},
{
"pattern": "\\bw(?:/|\\\\)\\b",
"replacement": "with"
},
{
"pattern": "\\bwo\\b",
"replacement": "without"
},
{
"pattern": "\\W(?:alt)\\W",
"replacement": "alternating"
},
{
"pattern": "\\bincl\\b",
"replacement": "incline"
},
{
"pattern": "\\bdecl\\b",
"replacement": "decline"
},
{
"pattern": "\\buni\\b",
"replacement": "unilateral"
},
{
"pattern": "\\btwo\\W+arms?\\b",
"replacement": "two-arm"
},
{
"pattern": "\\btwo\\W+legs?\\b",
"replacement": "two-leg"
},
{
"pattern": "\\bsingle\\W+arms?(?:\\W+unilateral\\b|\\b)",
"replacement": "single-arm"
},
{
"pattern": "\\bsingle\\W+legs?(?:\\W+unilateral\\b|\\b)",
"replacement": "single-leg"
},
{
"pattern": "\\blong\\W+lever\\b",
"replacement": "long-lever"
},
{
"pattern": "\\bshort\\W+lever\\b",
"replacement": "short-lever"
},
{
"pattern": "\\barms\\W+(?:to|on|at)\\W+(?:the\\W+)?sides?\\b",
"replacement": "arms-to-the-sides"
},
{
"pattern": "\\barm\\W+(?:to|on|at)\\W+sides?\\b",
"replacement": "arm-to-the-side"
},
{
"pattern": "\\bside\\W+to\\W+side\\b",
"replacement": "side-to-side"
},
{
"pattern": "\\bstanding\\W+up\\b",
"replacement": "standing"
},
{
"pattern": "\\bpadded\\W+stool\\b",
"replacement": "stool"
},
{
"pattern": "\\bwith\\W+chair\\b",
"replacement": "chair"
},
{
"pattern": "\\bon\\W+spot\\b",
"replacement": "in-place"
},
{
"pattern": "\\barms?\\W+circles?\\b",
"replacement": "arm circles"
},
{
"pattern": "\\bbottle\\W+(?:weights?|weighted)\\b",
"replacement": "bottle weight"
},
{
"pattern": "\\batt?$",
"replacement": "attachment"
},
{
"pattern": "\\brope\\W+attachment\\b",
"replacement": "rope-attachment"
},
{
"pattern": "\\b(?:sit\\W+walls?|wall\\W+sits?)\\b",
"replacement": "wall-sit"
},
{
"pattern": "\\bfigure\\W+(?:fours?|4s?)\\b",
"replacement": "figure-4"
},
{
"pattern": "\\b(?:forward\\W+lean|lean\\W+forward)\\b",
"replacement": "forward-lean"
},
{
"pattern": "\\b(?:backward\\W+lean|lean\\W+backward)\\b",
"replacement": "backward-lean"
},
{
"pattern": "\\bfull\\W+range\\W+of\\W+motion\\b",
"replacement": "full-range"
},
{
"pattern": "\\b(?:handle|band)\\W+(?:band|handle)\\b",
"replacement": "banded-handle"
},
{
"pattern": "\\belevanted\\b",
"replacement": "elevated"
},
{
"pattern": "\\bdumbell\\b",
"replacement": "dumbbell"
},
{
"pattern": "\\bdumbel\\b",
"replacement": "dumbbell"
},
{
"pattern": "\\bkettle\\W+bell\\b",
"replacement": "kettlebell"
},
{
"pattern": "\\bkettelbell\\b",
"replacement": "kettlebell"
},
{
"pattern": "\\bpush\\W+pull\\b",
"replacement": "push-pull"
},
{
"pattern": "\\bside\\W+lying\\b",
"replacement": "side-lying"
},
{
"pattern": "\\blying\\W+side\\b",
"replacement": "lying-side"
},
{
"pattern": "\\b(?:single|one)\\W+arm\\b",
"replacement": "single-arm"
},
{
"pattern": "\\b(?:single|one)\\W+leg\\b",
"replacement": "single-leg"
},
{
"pattern": "\\bin\\W+out\\b",
"replacement": "in-out"
},
{
"pattern": "\\bin\\W+out\\W+in\\b",
"replacement": "in-out-in"
},
{
"pattern": "\\bpull\\W+ups?\\b",
"replacement": "pull-up"
},
{
"pattern": "\\bchin\\W+ups?\\b",
"replacement": "chin-up"
},
{
"pattern": "\\bpush\\W+ups?\\b",
"replacement": "push-up"
},
{
"pattern": "\\bsit\\W+ups?\\b",
"replacement": "sit-up"
},
{
"pattern": "\\bside\\W+steps?\\b",
"replacement": "side-step"
},
{
"pattern": "\\bfull\\W+range\\b",
"replacement": "full-range"
},
{
"pattern": "\\bagainst\\W+(?:the|a)?(?:\\W+)?wall\\b",
"replacement": "against-wall"
},
{
"pattern": "\\bv\\W+bar\\b",
"replacement": "v-bar"
},
{
"pattern": "\\bbent\\W+over\\b",
"replacement": "bent-over"
},
{
"pattern": "\\b(?:ez|sz)(?:\\W+bar(?:bell)?)?\\b",
"replacement": "ez-bar"
},
{
"pattern": "\\bstep\\W+up\\b",
"replacement": "step-up"
},
{
"pattern": "\\bhammer\\W+grip\\b",
"replacement": "hammer-grip"
},
{
"pattern": "\\bsnatch\\W+grip\\b",
"replacement": "snatch-grip"
},
{
"pattern": "\\bhook\\W+grip\\b",
"replacement": "hook-grip"
},
{
"pattern": "\\bconventional\\W+grip\\b",
"replacement": "conventional-grip"
},
{
"pattern": "\\bwide\\W+grip\\b",
"replacement": "wide-grip"
},
{
"pattern": "\\bneutral\\W+grip\\b",
"replacement": "neutral-grip"
},
{
"pattern": "\\b(?:close|narrow)\\W+grip\\b",
"replacement": "close-grip"
},
{
"pattern": "\\breverse\\W+grip\\b",
"replacement": "reverse-grip"
},
{
"pattern": "\\bclean\\W+grip\\b",
"replacement": "clean-grip"
},
{
"pattern": "\\breverse\\W+close\\W+grip\\b",
"replacement": "reverse-close-grip"
},
{
"pattern": "\\bparallel\\W+grip\\b",
"replacement": "parallel-grip"
},
{
"pattern": "\\bparallel\\W+bar\\b",
"replacement": "parallel-bar"
},
{
"pattern": "\\bfront\\W+foot\\b",
"replacement": "front-foot"
},
{
"pattern": "\\bback\\W+foot\\b",
"replacement": "back-foot"
},
{
"pattern": "\\bfront\\W+leg\\b",
"replacement": "front-leg"
},
{
"pattern": "\\bback\\W+back\\b",
"replacement": "back-leg"
},
{
"pattern": "\\bstaggered\\W+stance\\b",
"replacement": "staggered-stance"
},
{
"pattern": "\\bbent\\W+knee\\b",
"replacement": "bent-knee"
},
{
"pattern": "\\bbent\\W+leg\\b",
"replacement": "bent-leg"
},
{
"pattern": "\\brear\\W+delt\\b",
"replacement": "rear-delt"
},
{
"pattern": "\\bfront\\W+delt\\b",
"replacement": "front-delt"
},
{
"pattern": "\\btoes\\W+up\\b",
"replacement": "toes-up"
},
{
"pattern": "\\bpalms\\W+up\\b",
"replacement": "palms-up"
},
{
"pattern": "\\bpalms\\W+down\\b",
"replacement": "palms-down"
},
{
"pattern": "\\bbehind\\W+back\\b",
"replacement": "behind-back"
},
{
"pattern": "\\bforward\\W+backward\\b",
"replacement": "forward-backward"
},
{
"pattern": "\\bfull\\W+squat\\b",
"replacement": "full-squat"
},
{
"pattern": "\\bhalf\\W+squat\\b",
"replacement": "half-squat"
},
{
"pattern": "\\bquarter\\W+squat\\b",
"replacement": "quarter-squat"
},
{
"pattern": "\\bvariation\\b",
"replacement": "version"
},
{
"pattern": "\\bversion\\s+one\\b",
"replacement": "version i"
},
{
"pattern": "\\bversion\\s+two\\b",
"replacement": "version ii"
},
{
"pattern": "\\bversion\\s+three\\b",
"replacement": "version iii"
},
{
"pattern": "\\bversion\\s+four\\b",
"replacement": "version iv"
},
{
"pattern": "\\bversion\\s+five\\b",
"replacement": "version v"
},
{
"pattern": "\\bversion$",
"replacement": "variation"
},
{
"pattern": "\\b(?:on|with)\\W+a\\b",
"replacement": " "
},
{
"pattern": "\\bon(?:\\W+the){0,1}\\b",
"replacement": " "
},
{
"pattern": "\\bof\\b(?!(?:\\s+\\w+){0,5}\\s+(?:pose|dance)\\b)",
"replacement": " "
},
{
"pattern": "\\bplus\\b",
"replacement": "+"
},
{
"pattern": "\\b90\\W+to\\W+90\\b",
"replacement": "90-to-90"
},
{
"pattern": "\\band\\b",
"replacement": "&"
}
]
}