Tengo una cadena de la que necesito extraer textos específicos.
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"'; let res = str.match(/[^id ="\[](.*)[^\]]/g); console.log(res); Quiero los textos solo en ids ['Test This is','second','third-123'] Pero obtengo [ 'Test This is" id ="second" abc 123 id ="third-123"' ] Todo el texto después de la primera identificación que no quiero. Necesito ayuda con el patrón.
Su patrón utiliza una clase de carácter negado en la que excluye la coincidencia de los caracteres individuales enumerados y también excluye la coincidencia [ y ] que no están presentes en los datos de ejemplo.
De esa manera, hace coincidir el primer carácter T en la cadena con [^id ="\[] y hace coincidir el último carácter ; en la cadena con [^\]] y el .* captura todo lo que hay en el medio.
Sugeriría usar una clase de carácter negado para excluir la coincidencia de " en su lugar:;
\bid\s*=\s*"([^"]*)"Demostración de expresiones regulares
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"'; let res = str.matchAll(/\bid\s*=\s*"([^"]*)"/g); console.log(Array.from(str.matchAll(/\bid\s*=\s*"([^"]*)"/g), m => m[1]));Puede simplificar esto a una expresión regular no codiciosa independientemente de dónde caen las comillas en la cadena:
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"'; let res = str.match(/".*?"/g); console.log(res);