Separate IPA
by Daniel Cheung
HTML
<label for="input">IPA inputs</label>
<textarea id="input"></textarea>
<label for="vowels">Vowels</label>
<textarea id="vowels"></textarea>
<button type="button" id="btn">
Run
</button>
<div id="inter1"></div>
<hr>
<div id="inter2"></div>
JavaScript
const input = document.getElementById('input')
const vowelsInput = document.getElementById('vowels')
const inter1 = document.getElementById('inter1')
const inter2 = document.getElementById('inter2')
const btn = document.getElementById('btn')
function run() {
const x = input.value
const v = vowelsInput.value.split(/ |\n/).filter(x => x != '').join('|')
const regex = x => new RegExp(`(.+?)(?:(${x})(\\D+)?)?(\\d+)`)
const regexC = x => new RegExp(`(.+?)(?:((?:${x})\\D*))?(\\d+)`)
const words = x.split(/ |\n/).filter(x => x!= '').map(x => x.match(regex(v))).map(([,...x]) => x)
const wordsC = x.split(/ |\n/).filter(x => x!= '').map(x => x.match(regexC(v))).map(([,...x]) => x)
inter1.innerText = wordsC.map(x => x.toString()).join('\n')
const initials = new Set(words.map(([x,..._]) => x))
const medials = new Set(words.map(([, x,..._]) => x))
const finals = new Set(words.map(([,, x,..._]) => x))
const initialsC = new Set(wordsC.map(([x,..._]) => x))
const finalsC = new Set(wordsC.map(([, x,..._]) => x))
/* const out = `
<h2>Initials</h2> <pre>${[...initials].join('\n')}</pre>
<h2>Medials</h2> <pre>${[...medials].join('\n')}</pre>
<h2>Finals</h2> <pre>${[...finals].join('\n')}</pre>
` */
const out = `
<h2>Initials</h2> <pre>${[...initialsC].join('\n')}</pre>
<h2>Finals</h2> <pre>${[...finalsC].join('\n')}</pre>
`
inter2.innerHTML = out
}
btn.addEventListener('click', run)