¿Separar cadena por entidades HTML?

Mi cadena contiene muchas entidades HTML, como esta

& # x22; Hola & nbsp; & lt; everyone & gt; & nbsp; allí & # x22;

Y quiero dividirlo por entidades HTML en esto:

Hola
todos
ahí

¿Alguien puede sugerirme una forma de hacer esto, por favor? Puede estar usando Regex?

Parece que puedes dividir &[^;]*; regex Es decir, el delimitador son cadenas que comienzan con & , termina con ; , y en el medio puede haber cualquier cosa menos ; .

Si puede tener múltiples delimitadores en una fila, y no quiere las cadenas vacías entre ellos, simplemente use (&[^;]*;)+ (o en general ( delim )+ patrón).

Si puede tener delimitadores al principio o al frente de la cadena, y no quiere las cadenas vacías causadas por ellos, simplemente recórtelas antes de dividir.


Ejemplo

Aquí hay un fragmento para demostrar las ideas anteriores ( ver también en ideone.com ):

 var s = ""Hello <everybody> there"" print (s.split(/&[^;]*;/)); // ,Hello,,everybody,,there, print (s.split(/(?:&[^;]*;)+/)); // ,Hello,everybody,there, print ( s.replace(/^(?:&[^;]*;)+/, "") .replace(/(?:&[^;]*;)+$/, "") .split(/(?:&[^;]*;)+/) ); // Hello,everybody,there 

var a = str.split(/\&[#a-z0-9]+\;/); debería hacerlo, aunque terminará con ranuras vacías en la matriz cuando tenga dos entidades una al lado de la otra.

 split(/&.*?;(?=[^&]|$)/) 

y cortar el último y primer resultado:

 ["", "Hello", "everybody", "there", ""] 
 >> ""Hello <everybody> there"".split(/(?:&[^;]+;)+/) ['', 'Hello', 'everybody', 'there', ''] 

La expresión regular es: /(?:&[^;]+;)+/

Coincide con las entidades como & seguido por 1+ no ; personajes, seguidos por a ; . Luego coincide con al menos uno de esos (o más) como el delimitador dividido. La syntax de no captura de (?:expression) se usa para que los delimitadores capturados no se pongan en la matriz de resultados ( split() coloca grupos de captura en la matriz de resultados si aparecen en el patrón).