How to create a simple word fragmenter for English words?

I am working on a conlang (a fantasy language basically), and I would like to automatically translate various English words into the fantasy language. I already have a huge list of word bases which I have manually collected (words like “create”, “dig”, “house”, “cat”, “sophisticated”, etc.). Now I would like to take advantage of the fact that I have these word “bases” and use them to automatically translate/transcribe English words that are “derivatives” of the base words. So I am wondering basically how to construct a simple system in JavaScript to do that.

The goal for this question is just to do the first step in the transformation. That is, to split a word into its parts. Then given the word parts, I can easily convert it to my fantasy language with all its quirks no problem. I won’t distract you with those details. Instead, all I need to know how to do is effectively split an English word into its parts. It seems easy at first but then getting into the weeds a little I am not sure if I need to build a full-fledge character-by-character parser, or if I can do something a little more clunky and simple. It doesn’t really need to be the most efficient, just needs to get the job done.

I am just beginning, stuck at what to do for the first step. I have basically just captured the prefixes and suffixes I am considering for this small project.

const prefixes = [
  //  'con', // words starting with con aren't really prefixes they are part of the base word.
  'de', // "defrost"
  'un', // "unsatisfactory"
  'dis', // "discontinuation"
  'il', // not "illustrate" but "illegal"
  'in', // not "interesting" but "incomplete"
  'im', // "immortal"
]

// don't have every possible suffix, but here are the key ones I am considering.
const suffixes = [
  'ion', // "attribute" vs. "attribution" (drops the "e") or "compression" vs. "compress"
  'ify', // "dehumidify"
  'some', // "awesome"
  'ship', // "friendship"
  'hood', // "neighborhood"
  'ist', // "artist"
  'or', // "creator" but not "doctor"
  'er', // "interpreter" but not "mother"
  'ed', // "created"
  's', // "creates"
  'ing', // "creating"
  'ism', // "creationism"
  'ive', // "creative",
  'ity', // "creativity"
  'ible', // "responsible" but not "feasible"
  'able', // "knowledgeable"
  'ry', // "pleasantry"
  'ly', // "excitedly"
  'ily', // "fuzzily"
  'dom', // "kingdom"
  'ish', // "reddish" (doubles the "d")
  'ful', // "careful"
  'less', // "fearless"
  'est', // "tallest"
  'ness', // "cleverness"
  'ence', // "correspondence"
  'ance', // "resemblance"
]

/**
* Rules/facts:
*
* - if base word ends in '-e', then drop the 'e' to look for suffixes.
* - don't always drop the '-e', like "knowledgeable".
* - some words have multiple prefixes and suffixes, like "creationism" or "carefully".
* - some words are based off derived words, like "creativity" from "creative" from "create".
* - can try adding an extra letter to get to the prefix (adding "d" to "red" for "reddish")
*/

function convert(baseWord, testWord) {
  
}

The convert function should take a base word, and a “test” word (input), and first figure out if it matches, then if it does match, split it into its appropriate parts. Here is some desired input and output.

convert('knowledge', 'knowledgeable') // => { base: 'knowledge', suffixes: ['able'] }
convert('fearlessly', 'fear') // => { base: 'fear', suffixes: ['less', 'ly'] }
convert('glaring', 'glare') // => { base: 'glare', suffixes: ['ing'] }
convert('unsure', 'sure') // => { base: 'sure', prefixes: ['sure'] }
// this next one might be too hard, if so, can be skipped
convert('undeniable', 'deny') // => { base: 'deny', prefixes: ['un'], suffixes: ['able'] }
convert('random', 'knowledgeable') // => undefined
convert('knowledge', 'other') // => undefined

So then, I will simply iterate through my word list and desired words to split, and then split them into their parts. I will then take that metadata and use it to construct the final fantasy word. I am just not sure really where to begin on how to check for all these prefixes and suffixes in a word. Let’s walk through “undeniable” to see.

First, iterate through each prefix and check if it is there. I think we can assume for this project that there is only one prefix possibly attached. However (edge case), the word might begin with a prefix, but that prefix is part of the word! As in “illustrate”, so we can’t consume the prefix until we subsequently check if the full word follows. Which is why it starts to get confusing/convoluted. Then we check the main word, but if it ends in a vowel can try dropping the vowel and check that too. Or try changing a trailing y into i. Then if that matches, try matching the suffixes. If our suffix starts with a vowel, maybe try adding back the last letter from the main word to see if we can get a match (i.e. glare + glared). That seems like about it. But again I am not sure how to approach this from a parsing perspective, it seems quite hard.