A questo avevo risposto. Praticamente le textarea sono tante, quindi per velocizzare il più possibile l'ìoperazione avevo pensato di fare tutto col mouse, senza ogni volta dover passare la mano dal mouse alla tastiera e viceversa.
Senza offesa, sei per caso monco o hai qualche particolare problema ad usare una mano sulla tastiera e una sul mouse? 
E' giusto una mia curiosità.
Ad ogni modo ti posto qui un esempio completo e funzionante.
Tieni presente che ho trovato problemi nel far innescare l'evento di pressione di un tasto della tastiera al click dx del mouse. In particolare ho trovato problemi proprio su CH, relativi al mantenimento della selezione del testo quando avviene l'evento oncontextmenu. Ho comunque mantenuto quella linea guida senza passare però per il canc.
Trovi commenti e note sul codice, se comunque hai bisogno di ulteriori chiarimenti, chiedi pure.
codice:
<!DOCTYPE HTML>
<html>
<head>
<title>Esempio</title>
<meta charset="utf-8">
<style type="text/css">
textarea{
width:400px;
height:200px;
}
</style>
</head>
<body>
<textarea>Questa è una stringa casuale e (questa è la porzione) da estrarre.</textarea>
<textarea>Qui ci sono più porzioni(tra parentesi), quindi sarà selezionata solo (l'ultima porzione).</textarea>
<textarea>Qui non ci sono porzioni tra parentesi. Non seleziono nulla</textarea>
<textarea>Qui c'è una parentesi aperta ( ma manca quella chiusa. Sara selezionata solo quella parentesi</textarea>
<textarea>Qui invece c'è qualche )incongruenza( tra le parentesi. Tra vedere e non vedere, seleziono giusto l'ultima parentesi trovata</textarea>
<textarea>Altro caso (di) incongruenza (. Seleziono sempre l'ultima parentesi trovata</textarea>
<script type="text/javascript">
var txt = document.getElementsByTagName('textarea') // NodeList degli elementi textarea
, i = txt.length // lunghezza del NodeList
;
while (i--) { // Ciclo gli elementi
var e = txt[i]; // Elemento corrente
e.onclick = selezionaPorzioneTesto; // Sull'evento click sx applico la funzione di selezione
e.oncontextmenu = rimuoviPorzioneTesto; // Sull'evento click dx applico la funzione di rimozione
}
function selezionaPorzioneTesto(){ // Funzione di selezione della porzione di testo tra parentesi
var e = this // L'elemento su cui ho cliccato
, p1 = e.value.lastIndexOf('(') // Posizione inizio selezione - ultima parentesi aperta
, p2 = e.value.lastIndexOf(')')+1 // Posizione fine selezione - ultima parentesi chiusa (compresa)
;
if (p1 == -1) p1 = p2-1; // Se la posizione iniziale non è definita, faccio riferimento a quella finale
p2 = Math.max(p1+1,p2); // Per eventuali incongruenze correggo la posizione finale in modo che comprenda solo l'ultima parentesi trovata
if (p1+p2!=-1){ // Se è presente almeno una parentesi eseguo la selezione
e.selectionStart = p1; // Inizio selezione
e.selectionEnd = p2; // Fine selezione
}
}
function rimuoviPorzioneTesto(ev){ // Funzione di rimozione della porzione di testo tra parentesi
var e = this // L'elemento su cui ho cliccato
, str = e.value // L'intera stringa di testo
/* NOTA:
Ho provato a recuperare le posizioni in base all'effettiva selezione.
Su FF funziona ma ho problemi su CH e IE9 in cui al click dx, se il puntatore del mouse non sta esattamente sopra il testo selezionato,
le posizioni della selezione sono ridefinite istantaneamente in base alla posizione corrente del puntatore.
Questa soluzione quindi non è troppo affidabile.
, p1 = e.selectionStart // Recupero la posizione iniziale della porzione selezionata
, p2 = e.selectionEnd // Recupero la posizione finale della porzione selezionata
Recupero quindi le posizioni con lo stesso criterio usato per effettuare la selezione.
Significa che, anche se non c'è un'effettiva selezione, la porzione di testo sarà comunque rimossa.
Chiaramente il tutto potrebbe essere ottimizzato inserendolo dentro una funzione a parte.
*/
, p1 = e.value.lastIndexOf('(')
, p2 = e.value.lastIndexOf(')')+1
;
if (p1 == -1) p1 = p2-1;
p2 = Math.max(p1+1,p2);
if (p1+p2!=-1){
e.value = str.slice(0, p1) + str.slice(p2); // Ricompongo la stringa senza il blocco di parentesi
e.selectionStart = e.selectionEnd = p1; // Riposiziono il cursore nel punto di rimozione; diversamente, dopo la modifica, andrebbe in fondo al testo
// Inibisco la comparsa del menu contestuale
ev.preventDefault();
ev.stopPropagation();
return false;
}
}
</script>
</body>
</html>