Entrada: Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh.
Salida: A ie, tosa, vv n.
Necesito una función javascript para resolver esto.
Estoy intentando algo como esto:
function short_verse(verse) { let result = []; verse.split(' ').map(word => word.charAt(0) != '' ? result.push(word.charAt(0)) : ''); return result.join(" "); } let input = "Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh.", output = short_verse(input); console.log(output);
La historia: Dicen que puedes memorizar textos de esta manera. :) Entonces, creo una aplicación que también incluirá esta función.
También debería funcionar para caracteres que no sean ascii. Ejemplo:
Entrada: Aliqușam țipsum ex, tempăs ornâre semper ac, varius vitae îbh.
Salida: A ț e, tosa, vv î
Nota: En mi caso, los diacríticos rumanos serían suficientes: ăâîșțĂÂÎȘȚ.
Podemos usar un enfoque de reemplazo de expresiones regulares aquí:
var input = "Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh."; var output = input.replace(/(\w)\w*/g, "$1"); console.log(output);
Si está utilizando solo caracteres de palabras, puede mantener el primer carácter y eliminar el resto de los caracteres de palabras.
\B
coincide con un límite que no es de palabra y \w+
coincide con 1 o más caracteres de palabra:
const s = "Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh."; console.log(s.replace(/\B\w+/g, ""));
Para la pregunta actualizada, puede capturar caracteres iniciales distintos de cualquier letra o carácter de espacio en blanco, seguidos de una sola letra. Siga las letras opcionales que deben eliminarse y use el grupo de captura 1 en el reemplazo.
([^\p{L}\s]*\p{L})\p{L}*
Vea la coincidencia de expresiones regulares en esta demostración de expresiones regulares .
[ "Dumnezeu a zis: „Să fie o întindere între ape, și ea să despartă apele de ape.”", "Aliqușam țipsum ex, tempăs ornâre semper ac, varius vitae îbh.", "Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh." ].forEach(s => console.log(s.replace(/([^\p{L}\s]*\p{L})\p{L}*/gu, "$1")) )
La siguiente función debería funcionar para caracteres, números y símbolos. La magia está en la expresión regular; [a-zA-ZÀ-ÿăâîșțĂÂÎȘȚ]+
extrae todas las palabras únicas que contienen caracteres alfanuméricos y del alfabeto rumano (según la solicitud de la pregunta), \s
extrae todos los caracteres de espacio porque queremos conservar el espacio y finalmente ^\w\s
extrae todos Caracteres no alfanuméricos y sin espacios, también conocidos como símbolos:
function short_verse(verse) { let result = []; const tokens = verse.match(/([a-zA-ZÀ-ÿăâîșțĂÂÎȘȚ]+)|(\s)|[^\w\s]/g); const firstChars = tokens.map((token) => token.charAt(0)); return firstChars.join(''); } let input1 = "Aliquam ipsum ex, tempus ornare semper ac, varius vitae nibh."; console.log(short_verse(input1)); let input2 = "Să fie o întindere între ape, și ea să despartă apele de ape." console.log(short_verse(input2));