Comment puis-je insérer une chaîne à un index spécifique d'une autre chaîne?
var txt1 = "foo baz"
Supposons que je veuille insérer "bar" après "foo", comment puis-je y parvenir?
J'y ai pensé substring()
, mais il doit y avoir un moyen plus simple et plus direct.
javascript
string
Jiew Meng
la source
la source
Réponses:
Vous pouvez créer votre propre prototype
splice()
dans String.Polyfill
Exemple
EDIT: l'a modifié pour garantir qu'il
rem
s'agit d'une valeur absolue.la source
slice
solution ci-dessous est meilleure et plus simple. (Splice est destructif, slice ne l'est pas, et il vaut mieux éviter de modifier "des objets que vous ne connaissez pas"). Cette solution ne devrait absolument pas être la première réponse visible, même si elle avait du sens à l'époque.my_array[my_array.length] = item
place demy_array.push(item)
?splice
dans ce cas; en effet, les cordes sont immuables. Pour cette raison, je pense quesplice
c'est un mauvais choix de mots clés. Ma principale objection est contre l'extension arbitraire des prototypes, à moins qu'il ne s'agisse de polyfills standard.L'insertion à un index spécifique (plutôt que, disons, au premier caractère d'espace) doit utiliser le découpage / sous-chaîne de chaînes:
la source
substring
serait bien ici. Je préfèreslice
en général car c'est plus flexible (indices négatifs, par exemple"foo baz".slice(1, -2)
). Il est également légèrement plus court, pour le peu qui en vaut la peine.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
fonctionnalité incluse dans ce qui précède; meilleure réponse ...Voici une méthode que j'ai écrite qui se comporte comme tous les autres langages de programmation:
Référence:
la source
{}
aux blocs if-else.else
c'est redondant.Faites simplement la fonction suivante:
puis l'utiliser comme ça:
Sortie: foo bar baz
Il se comporte exactement comme le String.Insert C # (Sharp) (int startIndex, string value).
REMARQUE: cette fonction d'insertion insère la valeur de chaîne (troisième paramètre) avant l' index d' entier spécifié (deuxième paramètre) dans la chaîne str (premier paramètre), puis renvoie la nouvelle chaîne sans modifier str !
la source
MISE À JOUR 2016: Voici une autre fonction prototype juste pour le plaisir (mais plus sérieuse!) Basée sur une
RegExp
approche à une ligne (avec support de pré-ajout activéundefined
ou négatifindex
):Précédente solution ( juste pour 2012) :
la source
Si quelqu'un cherche un moyen d'insérer du texte à plusieurs index dans une chaîne, essayez ceci:
Par exemple, vous pouvez utiliser ceci pour insérer des
<span>
balises à certains décalages dans une chaîne:la source
6: "<span>"
dit: à l'index 6, insérez le texte "<span>". Voulez-vous dire que vous souhaitez utiliser la valeur d'une variable entière comme index d'insertion? Si tel est le cas, essayez quelque chose commevar a=6, text = {}; text[a] = "<span>";
C'est essentiellement ce que fait @ Bass33, sauf que je donne également la possibilité d'utiliser un indice négatif pour compter à partir de la fin. Un peu comme la méthode substr le permet.
Cas d'utilisation: disons que vous avez des images en taille réelle utilisant une convention de dénomination mais que vous ne pouvez pas mettre à jour les données pour fournir également des URL de vignettes.
la source
Compte tenu de votre exemple actuel, vous pouvez obtenir le résultat en
ou
mais étant donné que vous pouvez faire de telles hypothèses, vous pourriez aussi bien passer directement à l'exemple de Gullen.
Dans une situation où vous ne pouvez vraiment pas faire d'hypothèses autres que basées sur un index de caractères, alors j'opterais vraiment pour une solution de sous-chaîne.
la source
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
la source
Je sais que c'est un vieux fil, cependant, voici une approche vraiment efficace.
Ce qui est génial, c'est qu'il contraint le contenu du nœud. Donc, si ce nœud était déjà sur le DOM, vous n'auriez pas besoin d'utiliser de sélecteurs de requête ou de mettre à jour le texte interne. Les changements refléteraient en raison de sa liaison.
Si vous aviez besoin d'une chaîne, accédez simplement à la propriété de contenu texte du nœud.
la source
Eh bien, nous pouvons utiliser à la fois la méthode de sous-chaîne et de tranche.
Le seul problème d'une méthode de sous-chaîne est qu'elle ne fonctionnera pas avec un indice négatif. Il prend toujours l'index de chaîne à partir de la 0e position.
la source
Donc, pour vous, ce serait
insertString("foo baz", "bar", 3);
Évidemment, ce serait une peinture à utiliser car vous devez à chaque fois fournir votre chaîne à la fonction, mais pour le moment je ne sais pas comment en faire quelque chose de plus facile comme un
string.replace(insertion, place)
. L'idée est toujours d'actualité.la source
Vous pouvez utiliser des expressions régulières avec un modèle dynamique .
les sorties:
Cela remplace les
text.length
espaces blancs au début de la chaîneoutput
. LeRegExp
moyen^\
- début d'une ligne\s
tout caractère d'espace blanc,{n}
fois répété , dans ce castext.length
. Utilisez\\
pour\
échapper les barres obliques inverses lors de la construction de ce type de motifs à partir de chaînes.la source
une autre solution, couper la chaîne en 2 et mettre une chaîne entre les deux.
la source
Vous pouvez le faire facilement avec regexp dans une seule ligne de code
"Bonjour belle RegExp!"
la source
Utilisation d'une tranche
Vous pouvez utiliser
slice(0,index) + str + slice(index)
. Ou vous pouvez créer une méthode pour cela.Méthode d'épissure pour les chaînes
Vous pouvez
split()
la chaîne principale et ajouter puis utiliser normalsplice()
Application de splice () à plusieurs index
La méthode prend un tableau de tableaux chaque élément de tableau représentant un seul
splice()
.la source
Je voulais comparer la méthode en utilisant la sous-chaîne et la méthode en utilisant la tranche de Base33 et user113716 respectivement, pour ce faire j'ai écrit du code
jetez également un oeil à ce comparaison de performances, sous-chaîne, tranche
Le code que j'ai utilisé crée d'énormes chaînes et insère la chaîne "bar" plusieurs fois dans l'énorme chaîne
La différence générale de performance est au mieux marginale et les deux méthodes fonctionnent très bien (même sur des chaînes de longueur ~~ 12000000)
la source
Les avantages de cette approche sont doubles:
la source