¿Cómo puedo insertar una cadena en un índice específico de otra cadena?
var txt1 = "foo baz"
Supongamos que quiero insertar "barra" después del "foo", ¿cómo puedo lograr eso?
Pensé en ello substring()
, pero debe haber una manera más simple y directa.
javascript
string
Jiew Meng
fuente
fuente
Respuestas:
Podrías crear tu propio prototipo
splice()
en String.Polyfill
Ejemplo
EDITAR: lo modificó para garantizar que
rem
sea un valor absoluto.fuente
slice
solución a continuación es mejor y más simple. (Splice es destructivo, slice no lo es, y es mejor evitar modificar "objetos que no conoces"). Esta solución no debería ser la primera respuesta visible, aunque haya tenido sentido en ese momento.my_array[my_array.length] = item
lugar demy_array.push(item)
?splice
en este caso; de hecho las cuerdas son inmutables. Por esta razón, creo quesplice
es una mala elección de palabras clave. Mi principal objeción es en contra de extender prototipos arbitrariamente, a menos que sean polyfills estándar.Insertar en un índice específico (en lugar de, digamos, en el primer carácter de espacio) tiene que usar la división / subcadena de cadenas:
fuente
substring
estaría bien aquí. Prefieroslice
en general porque es más flexible (índices negativos, por ejemplo"foo baz".slice(1, -2)
). También es un poco más corto, por lo poco que vale.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
función incluida en lo anterior; respuesta principal ...Aquí hay un método que escribí que se comporta como todos los demás lenguajes de programación:
Referencia:
fuente
{}
a los bloques if-else.else
es redundante.Simplemente realice la siguiente función:
y luego úsalo así:
Salida: foo bar baz
Se comporta exactamente, como C # (Sharp) String.Insert (int startIndex, valor de cadena).
NOTA: Esta función de inserción inserta el valor de la cadena (tercer parámetro) antes del índice entero especificado (segundo parámetro) en la cadena str (primer parámetro), ¡y luego devuelve la nueva cadena sin cambiar str !
fuente
ACTUALIZACIÓN 2016: Aquí hay otra función prototipo solo por diversión (¡pero más seria!) Basada en el
RegExp
enfoque de una línea (con soporte previoundefined
o negativoindex
):Solución anterior (de vuelta a 2012) solo por diversión :
fuente
Si alguien está buscando una forma de insertar texto en múltiples índices en una cadena, pruebe esto:
Por ejemplo, puede usar esto para insertar
<span>
etiquetas en ciertos desplazamientos en una cadena:fuente
6: "<span>"
dice: en el índice 6, inserte el texto "<span>". ¿Está diciendo que desea utilizar el valor de una variable entera como índice de inserción? Si ese es el caso, intente algo comovar a=6, text = {}; text[a] = "<span>";
Básicamente, esto es lo que está haciendo @ Bass33, excepto que también estoy dando la opción de usar un índice negativo para contar desde el final. Algo así como lo permite el método substr.
Caso de uso: supongamos que tiene imágenes de tamaño completo mediante una convención de nomenclatura pero no puede actualizar los datos para proporcionar también URL en miniatura.
fuente
Dado su ejemplo actual, podría lograr el resultado ya sea
o
pero dado que puede hacer tales suposiciones, es mejor pasar directamente al ejemplo de Gullen.
En una situación en la que realmente no puede hacer ninguna suposición que no sea basada en el índice de caracteres, entonces realmente elegiría una solución de subcadena.
fuente
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
fuente
Sé que este es un hilo viejo, sin embargo, aquí hay un enfoque realmente efectivo.
Lo bueno de esto es que coacciona el contenido del nodo. Entonces, si este nodo ya estuviera en el DOM, no necesitaría usar ningún selector de consulta o actualizar el texto interno. Los cambios se reflejarían debido a su vinculación.
Si necesita una cadena, simplemente acceda a la propiedad de contenido de texto del nodo.
fuente
Bueno, podemos usar tanto el método de subcadena como el de corte.
El único problema de un método de subcadena es que no funcionará con un índice negativo. Siempre toma el índice de cadena desde la posición 0.
fuente
Entonces, para ti, sería
insertString("foo baz", "bar", 3);
Obviamente, esta sería una pintura para usar porque tienes que proporcionar tu cadena a la función cada vez, pero por el momento no sé cómo convertirla en algo más fácil como a
string.replace(insertion, place)
. Sin embargo, la idea sigue en pie.fuente
Puede usar expresiones regulares con un patrón dinámico .
salidas:
Esto reemplaza los
text.length
caracteres de espacios en blanco al comienzo de la cadenaoutput
. LosRegExp
medios^\
: comienzo de una línea,\s
cualquier carácter de espacio en blanco,{n}
veces repetidas , en este casotext.length
. Úselo\\
para\
escapar de las barras invertidas cuando construya este tipo de patrones a partir de cadenas.fuente
otra solución, corta la cuerda en 2 y pon una cuerda en el medio.
fuente
Puedes hacerlo fácilmente con regexp en una línea de código
"¡Hola, encantadora RegExp!"
fuente
Usando rebanada
Puedes usar
slice(0,index) + str + slice(index)
. O puedes crear un método para ello.Método de empalme para cadenas
Puede
split()
la cadena principal y agregar y luego usar normalsplice()
Aplicando splice () en múltiples índices
El método toma una matriz de matrices, cada elemento de la matriz representa un único
splice()
.fuente
Quería comparar el método usando la subcadena y el método usando el segmento de Base33 y user113716 respectivamente, para hacer eso escribí un código
También eche un vistazo a esta comparación de rendimiento, subcadena, corte
El código que utilicé crea cadenas enormes e inserta la "barra" de cadenas varias veces en la cadena enorme
La diferencia general en el rendimiento es marginal en el mejor de los casos y ambos métodos funcionan bien (incluso en cadenas de longitud ~~ 12000000)
fuente
Los beneficios de este enfoque son dobles:
fuente