Lo que quiero hacer es tomar una cadena como this.those.that
y obtener una subcadena hacia o desde la enésima aparición de un carácter. Por lo tanto, desde el inicio de la cadena hasta la segunda aparición de .
se devolverá this.those
. Del mismo modo, desde la segunda aparición de .
hasta el final de la cadena, se devolverá that
. Lo siento si mi pregunta es nublada, no es tan fácil de explicar. Además, no sugiera hacer variables adicionales, y el resultado estará en una cadena y no en una matriz.Cortar una cadena en la n. ° aparición de un carácter
Respuesta
Podría hacerlo sin matrices, pero necesitaría más código y sería menos legible.
Generalmente, solo desea utilizar la mayor cantidad de código para realizar el trabajo, y esto también aumenta la legibilidad. Si encuentra que esta tarea se está convirtiendo en un problema de rendimiento (compárela), y luego puede decidir comenzar a refactorizar para el rendimiento.
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter).slice(start),
result = tokens.join(delimiter); // those.that
Pensé que el resultado se suponía que era tanto "this.those" como "that"? – tvanfosson
@tvanfosson Quizás malinterpreté la pregunta, pero fue aceptada :) – alex
guau, esta respuesta es increíble, gracias alex! – iamserious
estoy perplejo en cuanto a por qué quiere hacer las cosas puramente con funciones de cadena, pero supongo que se podría hacer algo como lo siguiente:
//str - the string
//c - the character or string to search for
//n - which occurrence
//fromStart - if true, go from beginning to the occurrence; else go from the occurrence to the end of the string
var cut = function (str, c, n, fromStart) {
var strCopy = str.slice(); //make a copy of the string
var index;
while (n > 1) {
index = strCopy.indexOf(c)
strCopy = strCopy.substring(0, index)
n--;
}
if (fromStart) {
return str.substring(0, index);
} else {
return str.substring(index+1, str.length);
}
}
Sin embargo, me gustaría firmemente partidario de algo así como la de Alex código mucho más simple.
+1 por esfuerzo :) –
Si realmente quiere meter a métodos de cadena, entonces:
// Return a substring of s upto but not including
// the nth occurence of c
function getNth(s, c, n) {
var idx;
var i = 0;
var newS = '';
do {
idx = s.indexOf(c);
newS += s.substring(0, idx);
s = s.substring(idx+1);
} while (++i < n && (newS += c))
return newS;
}
Prueba esto:
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){3}/, '');
"xcv.xcv.x"
"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){**nth**}/, '');
- ¿dónde está n es la cantidad de ocurrencia de eliminar.
Esta es mejor que la respuesta aceptada. A veces el delimitador podría ser una expresión regular (por ejemplo, \ s +). caso, la respuesta aceptada no funcionará. Pero t su voluntad. – killua8p
@ killua8p Odd reasoning. Si * a veces el delimitador podría ser una expresión regular *, lo diseñaría como tal. Si fue para dividir en una cadena, no siempre deberías privilegiar la expresión regular porque * puedes necesitarla *. YAGNI. – alex
Esta es aproximadamente 4 veces más rápido. – jazzgil
Por si acaso alguien necesita tanto "este" y "those.that" de una manera como Alex describió en su comment, aquí es un código modificado:
var str = 'this.those.that',
delimiter = '.',
start = 1,
tokens = str.split(delimiter),
result = [tokens.slice(0, start), tokens.slice(start)].map(function(item) {
return item.join(delimiter);
}); // [ 'this', 'those.that' ]
document.body.innerHTML = result;
- 1. Eliminar cadena después de la última aparición de un carácter
- 2. ¿Cómo encontrar nth aparición de carácter en una cadena?
- 3. Devuelve la parte de una cadena antes de la primera aparición de un carácter en php
- 4. n-ésimo carácter de la cadena int
- 5. Strip cadena después de la tercera aparición del carácter python
- 6. ¿Cómo repito un carácter n veces en una cadena?
- 7. Encuentra la última aparición de caracteres en una cadena
- 8. ¿Cómo encontrar la penúltima aparición de un carácter dentro de una cadena?
- 9. Reemplazar toda la aparición de una cadena en un elemento
- 10. cómo cortar los últimos n bytes de una cadena en corte de cadena bash?
- 11. Buscar Nth ocurrencia de un carácter en una cadena
- 12. ¿Cómo tomar una subcadena de una cadena dada hasta la primera aparición del carácter especificado?
- 13. Cómo cortar una cadena
- 14. cortar parte de una cadena
- 15. ¿Obtiene el índice de la enésima aparición de una cadena?
- 16. Cortar cadena en java
- 17. Modificación de un carácter en una cadena en Lua
- 18. Accediendo a un carácter en una cadena
- 19. C# añadiendo un carácter en una cadena
- 20. ¿Convierte un solo carácter en una cadena?
- 21. Dividir una cadena en una cadena, no un carácter
- 22. ¿Se elimina la primera aparición de palabra de una cadena?
- 23. Reemplazar una sola aparición de la cadena Obj-c
- 24. Eliminar un carácter de una cadena
- 25. Cómo cortar palabras especificadas de la cadena
- 26. Manera eficiente de encontrar la Frecuencia de un personaje en una Cadena en java: O (n)
- 27. ¿Reemplazar la primera aparición solamente de una cadena?
- 28. Reemplazar la última aparición de caracteres en la cadena
- 29. Eliminar un solo carácter de una cadena?
- 30. Cómo cortar la primera y la última n columnas?
Cualquier oposición a dividir en una matriz, y luego unir las porciones de las matrices de nuevo? Utiliza funciones que operan en cadenas o producen cadenas. – tvanfosson
Parece que ya sabes la respuesta; dividir la cuerda en su separador y luego reformar una nueva cuerda con las partes parece ser la mejor opción. ¿Por qué limitarse a no usar una matriz? – Tejs
Una cadena es una matriz. – Incognito