Dada la cadena de una línea (muchas etiquetas div con nombre+imagen adentro)
<div id="img-1" class="draggable">AP2<br><img src="URL"></div><div id="img-3" class="draggable">AP6<br><img src="URL"></div><div id="img-6" class="draggable">AP5<br><img src="URL"></div>...que se produce después de que el usuario haya arrastrado y soltado las imágenes, quiero recuperar el orden real del div.id: "1", "3", "6"...
En https://regex101.com/ escribí la expresión regular /img-([^()]*)" class/gU que funciona perfectamente: img-1" class + img-3" class + img-6" class son seleccionado. El siguiente paso es obtener 1, 3, 6 eliminando img- y " class .
Prob: en FF (Mac) recibo el mensaje de consola Uncaught SyntaxError: invalid regular expression flag U ... así que pruebo otra expresión regular /img-([^()]*)" class/g pero no funciona como esperado en regex101: todo se selecciona desde la primera img- hasta la última class : img-1" class="draggable">AP2 ---> </div><div id="img-6" class . Cambiar las banderas a /g /gi /gim da el mismo resultado.
Pero escribiendo <div id="img-1" class="draggable">AP2<br><img src="URL"></div>()<div id="img-3" class="draggable">AP6<br><img src="URL"></div>()<div id="img-6" class="draggable">AP5<br><img src="URL"></div> ( con paréntesis entre los divs) funciona.
¿Cómo explicarlo y hay otra expresión regular para capturar lo que se espera sin agregar estos ()?
Primero, no creo que este sea un problema de Firefox, sí, funciona en regex101 pero porque en el lado izquierdo no seleccionó el idioma correcto. Seleccione JS (ECMAscript, es el superconjunto) y la opción U desaparecerá.
La bandera U es para 'poco codicioso', aún no sé si algún motor JS lo admite, pero puede lograr el mismo efecto al:
/img-([^()]*?)" class/g con solo la bandera g. ? hace que el '*' no sea codicioso.