Nunca he usado expresiones regulares en javascript (al menos como en php), pero en php sería así (creo que las expresiones regulares no cambian entre sistemas, pero quien sabe.
Expresión regular
/([A-Za-z])([A-Za-z0-9]+)/
A reemplazar por
$1 $1 hace referencia al primer
(), que contiene la primera letra.
Si bien no me equivoco, para que el sistema funcione en javascript hay que poner
g al final del patrón (para que sea búsqueda global).
Ahora lo pruebo y te digo.
------------------------
Ya está:
Código:
<script type="text/javascript">
txt="Desoxiribo-Nucleicic Acid";
document.write(txt+"<br/>"+txt.replace(/([A-Za-z])([A-Za-z0-9]+)(\-|\s|$)/g, "$1"));
</script>
en forma de función
Código:
function acronym(txt){
return txt.replace(/([A-Za-z])([A-Za-z0-9]+)(\-|\s|$)/g, "$1");
}
Explicación:
([A-Za-z]) :Busca la primera letra (y por ser el primer paréntesis lo guarda en $1. Como no hay un + después del ] (como en el siguiente) no busca mas que una letra.
([A-Za-z0-9]+): Busca el resto de letras de la palabra. Las palabras no pueden tener tildes, que se arregla añadiendo ÁÉÍÓÚáéíóú detrás del 9 (para que la primera letra pueda tener tildes se hace lo mismo).
(\-|\s|$) :Busca hasta el final de la palabra, determinado por un gión (\-), un espacio (\s) o el final de la cadena ($). El inicio de una cadena es ^.
Añadiendo las tildes:
Código:
function acronym(txt){
return txt.replace(/([A-Za-zÁÉÍÓÚáéíóú])([A-Za-z0-9ÁÉÍÓÚáéíóú]+)(\-|\s|$)/g, "$1");
}
Las tildes tienen un fallo por que los acrónimos no se acentúan (perderían su corrección). Ergo:
Código javascript
:
Ver originalfunction acronym(txt){
var result = txt.replace(/([A-Za-zÁÉÍÓÚáéíóú])([A-Za-z0-9ÁÉÍÓÚáéíóú]+)(\-|\s|$)/g, "$1");
result = result.replace(/Á/,"A")
result = result.replace(/É/,"E")
result = result.replace(/Í/,"I")
result = result.replace(/Ó/,"O")
result = result.replace(/Ú/,"U")
result = result.replace(/á/,"a")
result = result.replace(/é/,"e")
result = result.replace(/í/,"i")
result = result.replace(/ó/,"o")
result = result.replace(/ú/,"u")
return result;
}
Este script lo produce (está mejorado del anterior).