Expresión regular para la validación de la fuerza de la contraseña

He escrito una expresión regular que podría usarse para la validación de la fortaleza de la contraseña:

^(?:([A-Z])*([a-z])*(\d)*(\W)*){8,12}$

La expresión consta de cuatro grupos:

Cero o más caracteres en mayúsculaCero o más caracteres en minúsculaCero o más dígitos decimalesCero o más caracteres que no sean palabras (!, £, $,%, etc.)

La forma en que quiero que funcione es determinar cuántos de los grupos se han emparejado para determinar la fortaleza de la contraseña. así, por ejemplo, si solo se empareja 1 grupo, sería débil. Si los cuatro grupos se emparejaran, sería fuerte.

He probado la expresión usandoRubular (un editor de expresiones regulares de Ruby).

Aquí puedo ver visualmente, cuántos grupos están emparejados, pero quiero hacer esto en JavaScript. Escribí un script que devuelve el número de grupos emparejados, pero los resultados no fueron los mismos que puedo ver en Rubular.

¿Cómo puedo lograr esto en JavaScript? y es mi expresión regular hasta la tarea?

Respuestas a la pregunta(6)

Su respuesta a la pregunta