que hace el ‘|’ significa en esta expresión regular?

Esta expresión regular proviene de JQuery, y el “|” significa “o”, pero ¿qué dos partes están incluidas para elegir?

/^(?:[^#<]*()[^>]*$|#([\w\-]*)$)/

es [^>]*$ | #([\w\-]*)$ o ()[^>]*$ | #([\w\-]*)$) o cualquier otra cosa?

Es [^#<]*(<[\w\W]+>)[^>]*$ y #([\w\-]*)$

Visualización de expresión regular

Demostración de Debuggex

Simplemente: x|y

Coincide con x o y .

Por ejemplo: /green|red/ coincide con green en green apple y red en red apple.

Ver expresión regular en mdn

Es [^#<]*(<[\w\W]+>)[^>]*$ o #([\w\-]*)$ , y ambos en un grupo que no captura.

 /^(?:EXP)$)/ # EXP => A|B /^(?:A|B)$)/ # A => [^#<]*(<[\w\W]+>)[^>]*$, B => #([\w\-]*)$ /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/ 

Escribirlo en multilínea con sangría ayuda a:

 ^ (?: [^#<]* ( < [\w\W]+ > ) [^>]* $ | # ( [\w\-]* ) $ ) 

Tu segunda suposición es correcta. El | tiene una prioridad menor que la concatenación (es decir, escribir expresiones una después de la otra).