Estoy tratando de hacer coincidir una cadena entre delimitadores si y solo si contiene la identificación que estoy buscando. Por ejemplo, supongamos que tengo un archivo de texto que contiene varias entradas como las siguientes:
/id:12345, comment:"test @#$%7 *<", date:JUN-06-21/;/comment:"@#rehj%fh^?*<", date:MAR-15-20, id:11333/;/date:AUG-22-18, id:44618, comment:"&%$@#^?*!!/;Digamos que quiero hacer coincidir una entrada que tiene el ID 44618 usando REGEX. Lo que dificulta esto es que la identificación puede aparecer al principio, en el medio o en la última posición. El siguiente es el REGEX que tengo hasta ahora pero no funciona.
\/\w[a-zA-Z0-9,:]*?\s?(id:44618,)\s?(\/\w[a-zA-Z0-9:;/])*Si solo necesita una identificación específica, simplemente escriba la identificación de expresiones regulares y establezca el indicador "g"-global y "m" multilínea yourString.match (/ id: 747484 / gm) Y para diferentes identificaciones yourString.match (/ id: \ d +/ gm)
Usó expresiones regulares para obtener la entrada completa donde la identificación puede estar en cualquier posición de la entrada:
/\/[^;]*?\bid:44618\D[^;]*?;/Regex en contexto y banco de pruebas:
const input = '/id:12345, comment:"test @#$%7 *<", date:JUN-06-21/;' + '/comment:"@#rehj%fh^?*<", date:MAR-15-20, id:11333/;' + '/date:AUG-22-18, id:44618, comment:"&%$@#^?*!!/;'; const regex = /\/[^;]*?\bid:44618\D[^;]*?;/; alert(input.match(regex)[0]);Salida de alerta, imprimiendo toda la entrada:
/date:AUG-22-18, id:44618, comment:"&%$@#^?*!!/;El patrón no coincide con nada porque la primera clase de caracteres [a-zA-Z0-9,:] no contiene todos los caracteres permitidos para coincidir hasta que id:44618 en la cadena de ejemplo.
Podría extenderlo, por ejemplo, de esta manera , pero eso no coincidirá hasta que el delimitador /;
Otro pensamiento a tener en cuenta es que si la identificación está al principio como /id:44618 , entonces hacer coincidir el carácter de la primera palabra como \/\w en su patrón evitará que coincida con la identificación ya que el primer carácter ya se ha consumido.
Podría extender la clase de carácter al final del patrón con todos los caracteres permitidos, pero como también puede ser un comentario, no conoce los posibles caracteres por adelantado.
Si el campo de comentario no está antes del campo de identificación, lo que podría hacer es afirmar el carácter de la palabra después de la apertura / usando una anticipación positiva (?=\w) y luego hacer coincidir la identificación y hacer coincidir la menor cantidad posible de caracteres .*? hasta el cierre /;
\/(?=\w)[a-zA-Z0-9,:;\s-]*?(id:44618).*?\/;Demostración de expresiones regulares
Si no hay otro / permitido, también puede usar una clase de carácter negado [^/]* que coincida con cualquier carácter excepto la barra inclinada
\/[^/]*(id:44618)[^/]*\/;