Primero hay que empezar por lo que hace tu patrón:
var a = '[^+][a-zA-Z]'
var reg = new RegExp(a);
console.log(reg.test('aA'));
console.log(reg.test('+aA'));
Este busca cualquier coincidencia en un string que contenga: [cualquier caracter que no sea '+']
y [cualquier caracter que esté entre a-z o A-Z]
Algunos ejemplos de strings que encontrará tu patrón: 'aF', 'eC', '3V', '.a'
En esta liga puedes ver los patrones que encuentra la expresión, además de que la uso mucho cuando trabajo con expresiones regulares: https://regexr.com/3h5tb
Ahora tu primer pregunta: ¿Escapar o no el signo de más: [^\+]
?
Como tal no es necesario ya que si haces la prueba ambas expresiones son equivalentes y te darán el mismo resultado:
var a = '[^\+][a-zA-Z]'
var reg = new RegExp(a);
console.log(reg.test('aA'));
Esto es principalmente porque dentro de esa expresión el signo de más se toma como lo es, un caracter de signo de más, y no como un cuantificador como una expresión regular acostumbra usarlo, para eso este elemento tendría que ir a la derecha de algún caracter donde requieras buscar uno o más, o a la derecha de una expresión donde de igual forma requieras buscar uno o más ejemplo:
var a = '[^+]+[a-zA-Z]'
var b = '[^+][a-zA-Z]+'
var reg = new RegExp(a);
var regB = new RegExp(b);
console.log(reg.test('aaA'));
console.log(regB.test('icCdfe'));
Aquí también el ejemplo en la liga con patrón b de este ejemplo, y si te fijas ahora busca cadenas más largas, por el cuantificador +
: http://regexr.com/3h5te
La segunda pregunta: ¿Usar ^ y $
?
Estos símbolos indican a la expresión el inicio y el fin de la cadena que la expresión debe de buscar, lo que aquí si hay que hacer énfasis es que estás dando un inicio y fin, por lo que cualquier cosa que esté antes o después de tu string que estás buscando ocasionará que tu expresión no lo encuentre al no cumplir con los patrones, ejemplo:
var a = '^[^+][a-zA-Z]$'
var reg = new RegExp(a);
console.log(reg.test('aA'));
console.log(reg.test('+a')); //Caracter '+' por lo que falla
console.log(reg.test('+aA')); //Caracter '+' pero usas ^$ por lo que aún falla, aunque en los primeros ejemplos si funcione
Con esto podemos decir que al usar ^ $
acotas el patrón de búsqueda a un resultado y que este sea exacto y cumpla con la condición de la expresión, de no usarlo como en los primeros ejemplos, aunque encuentre un signo de más, sigue encontrando una pareja de caracteres que cumplen con tu condición y la prueba te regresa true