Ciao, personalmente non userei regex. Puoi risolvere con un semplice substring.
Attraverso una variabile indice, di volta in volta controlli che il valore del tuo campo corrisponda alla porzione della stringa (che va dal suo primo carattere fino al carattere determinato dalla variabile indice). L'indice chiaramente si incrementa ad ogni "digitazione".
Ti posto un esempio da cui puoi prendere spunto:
codice:
<!DOCTYPE HTML>
<html>
<head>
<title>Esempio</title>
<meta charset="utf-8">
<script type="text/javascript">
var str = "gatto";
var id = 0; // indice corrente della digitagione
function controllo(){
this.value!=str.substring(0,++id)&&(id=0,this.value="");
}
window.onload = function(){
c = document.getElementById("tuocampo");
c.onpaste = function (){return false}; // meglio bloccare eventi sconvenienti
(c.oninput = controllo)(); // eseguo il controllo ad ogni "input". L'evento oninput non funziona su versioni di IE precedenti alla 9
}
</script>
</head>
<body>
<input id="tuocampo" type="text" value="">
<!-- o con una textarea
<textarea id="tuocampo"></textarea>
-->
</body>
</html>
Non so se possa soddisfare la tua idea di "minimo codice", nel caso puoi comunque usare diverse tecniche o librerie tipo jQuery o strumenti per minimizzare il tutto.
@Andrea: non ho capito il tuo intervento riguardo il "db vocabolario". Forse mi sfugge qualcosa...