Hola!
-En primer lugar, qué quiere decir "en forma de literal"?
Esto simplemente se refiere a cómo se ha definido la expresión regular. En la entrega se indica:
JavaScript permite crear expresiones regulares de dos maneras:
a) En forma de literal: var miExpresionRegular = /as?.a/ representa a todas las cadenas que contienen una subcadena con la primera letra de la subcadena una a, seguida de una s, opcionalmente seguida de cualquier letra, y seguida de una a.
b) Instanciando el objeto RegExp: var miExpresionRegular = new RegExp("as?.a") representa lo mismo.
Cuando escribes una expresión regular dentro de / ... / decimos que estamos usando una expresión regular en forma de literal, es solo una cuestión de terminología.
-Después, no comprendo cómo ?. equivale a "opcionalmente seguida de cualquier letra". ¿No era un simple punto y ya está?
En la entrega se explica que el símbolo punto indica existencia de cualquier carácter. Por ejemplo la expresión regular /ca.e/ concuerda con cate y con cafe pero no con catte ni con caffe ni con cae
El símbolo interrogación indica opcionalidad: el carácter que lo precede puede aparecer 0 ó 1 vez en la subcadena. Por ejemplo la expresión regular /ca?e/ concuerda con cae y con ce, porque permite que haya un carácter a o ninguno. No concuerda con catte ni con caffe ni con came.
-Un poco más adelante, además, como ejemplo de cadena válida o no válida según el patrón var miExpresionRegular = /as?.a/
Aquí el patrón implica que la cadena ha de contener una a, seguida opcionalmente de una s, seguida de cualquier carácter, y luego seguida de otra a.
castaño cumple porque hay una a seguida de una s, seguida de una t (que es cualquier caracter) y luego seguida de una a.
casualidad sí cumple porque hay una a seguida de una s seguida de una u (que es cualquier carácter) y luego seguida de una a. Por tanto tienes razón al plantear esa duda: ahí hay un pequeño error en el curso (que vamos a corregir, gracias por indicarlo).
Esto podemos comprobarlo añadiendo msg = msg + '¿Contiene casualidad el patrón? : '+ miExpReg.test('casualidad') +'\n'; al código del curso, vemos que nos devuelve true.
La última duda que tengo: las reglas para las expresiones regulares en JS son las mismas que se usa en las restricciones para XML?
Entre distintos lenguajes puede haber similitudes en la forma de crear expresiones regulares. En algunos casos pueden coincidir, pero en otras no. Por eso siempre que vayamos a usar expresiones regulares debemos consultar la especificación de expresiones regulares para ese lenguaje.
Saludos!