Estas son algunas cadenas de demostración,
enum('a', 'b', 'c') varchar(255) int unsigned Tomando el primero como ejemplo, quiero hacer coincidir enum y 'a', 'b', 'c' . Todo lo que está dentro de los corchetes es opcional, como se ve en el tercer ejemplo: int unsigned . ¿Cómo hago esto?
Lo intenté,
(.*)(\((.*)\))?Sin embargo, esto coincide con toda la cadena por alguna razón.
const out = /(.*)(\((.*)\))?/.exec(`enum('a', 'b', 'c')`) console.log(out)Puedes usar
const [, first, second] = /^(.*?)(?:\((.*)\))?$/.exec(`enum('a', 'b', 'c')`) console.log(first + '\n' + second)Vea la demostración de expresiones regulares . Detalles :
^ - comienzo de la cadena(.*?) - Grupo 1: cero o más caracteres que no sean caracteres de salto de línea , la menor cantidad posible(?:\((.*)\))? - una secuencia opcional de ( , cualquier cero o más caracteres que no sean caracteres de salto de línea tantos como sea posible (capturados en el Grupo 2), y luego un ) carácter$ - final de la cadena. const tests = [ "enum('a', 'b', 'c')", "varchar(255)", "int unsigned" ]; tests.forEach(test => console.log(/([^(]+)(?:\((.*)\))?/.exec(test)));El primer grupo de captura toma la parte antes del paréntesis, el segundo, opcionalmente, lo que está contenido dentro del paréntesis, si corresponde.