let rx = /(\/MxML\/[a-z0-9\[\]@/]*)/gi; let s = 'If (/MxML/trades[1]/value== 1 then /MxML/trades[type=2]/value must be /MxML/stream/pre/reference@href'; let m; let res = []; while ((m = rx.exec(s))) { res.push(m[1]); } console.log(res);= está bien. Pero == o === no están bien.Salida deseada
[ '/MxML/trades[1]/value', '/MxML/trades[type=2]/value', '/MxML/stream/pre/reference@href', ];Mi salida actual (incorrecta)
[ '/MxML/trades[1]/value', '/MxML/trades[type', '/MxML/stream/pre/reference@href', ]; Puedo pensar en un vistazo, pero no puedo entender cómo usarlo aquí. (?<!\=)\=(?!\=)
He estado revisando varios otros ejemplos en Stackoverflow, pero se trata de evitar la repetición de todos los caracteres y no de evitar la repetición de un carácter particular (=) junto con otros caracteres válidos.
Aquí hay una expresión regular que debería ser compatible en todos los navegadores:
/(\/MxML\/(?:[a-z0-9\[\]@/]|=(?!=))*)/gi/(\/MxML\/ - su expresión regular(?: - iniciar un grupo sin captura; necesitamos esto para implementar un operador "o" y no estropear el uso de m[1][a-z0-9\[\]@/] - su expresión regular de caracteres incluidos en la lista blanca; observe que se eliminó el asterisco| - o=(?!=) - permite un signo igual no seguido por un signo igual)* - cierra el grupo que no captura y captura entre cero e infinitos casos de lo que hay dentro)/gi - tu expresión regular let rx = /(\/MxML\/(?:[a-z0-9\[\]@/]|=(?!=))*)/gi; let s = 'If (/MxML/trades[1]/value== 1 then /MxML/trades[type=2]/value must be /MxML/stream/pre/reference@href'; let m; let res = []; while ((m = rx.exec(s))) { res.push(m[1]); } console.log(res);