2
votes

Pourquoi un $ a-t-il disparu?

let str = '$$double_dollars$$'
console.log(str.replace('$$double_dollars$$', '$$no_double_dollars$$'));
// => $no_double_dollars$
// expected $$no_double_dollars$$

Pourquoi cela se produit-il? Comment contourner ce bug?


8 commentaires

Je suis à peu près sûr que str.replace interprète $ a un caractère spécial d'expression régulière ($ signifie que la chaîne doit commencer par ce qui précède $)


Lisez developer.mozilla.org/en-US / docs / Web / JavaScript / Reference /…


Contourner ce problème pourrait être d'échapper au signe $ (en s'assurant qu'il n'est pas interprété comme un caractère spécial), quelque chose comme "\ $ \ $ double_dollars \ $ \ $"


str.replace ('$$ double_dollars $$', '$$$$ still_double_dollars $$$$');


@ H.Figueiredo Oui, $ est un caractère spécial RegExp, mais il n'y a pas de RegExp dans la question.


@Teemu String.replace utilisera un RegExp s'il est fourni, donc oui si Javascript considère: remplacer (quelque chose) que "quelque chose" est un RegExp, alors il y aura RegExp dans la question.


@ H.Figueiredo JavaScript ne considère pas que "quelque chose" est un RegExp, si une chaîne a été fournie. C'est une chaîne et elle n'est pas implicitement convertie en RegExp. " [Une chaîne] est traitée comme une chaîne verbatim et n'est pas interprétée comme une expression régulière ".


@Teemu vous avez raison! Je pensais que Javascript interprétait la chaîne comme un littéral RegExp, mon mauvais. (Je considérerais toujours ce comportement comme similaire à RegExp, étant donné que $ sélectionne une partie de la correspondance)


3 Réponses :


0
votes

Consultez la documentation pour passer une chaîne de remplacement à remplacer .

$ est un caractère spécial. Pour exprimer un $ littéral, utilisez $$.

let str = '$$double_dollars$$'
console.log(str.replace('$$double_dollars$$', '$$$$result$$$$'));


0 commentaires

2
votes

Selon la documentation MDN pour < code> String.prototype.replace (comme l'indique @Alex), il existe une liste de modèles spéciaux qui sont évalués en conséquence et l'un d'eux est celui que vous utilisez.

Le modèle spécial est le suivant:

  • $$ insère un $

Consultez la documentation MDN < / a> pour la liste complète des modèles spéciaux.

Et comme l'a commenté @ H.Figueiredo, vous pouvez échapper aux signes dollar ou suivre l'une des réponses affichées quelques secondes après cette réponse.


0 commentaires

2
votes

Voir: MDN - Chaîne .prototype.replace # Spécifier une fonction comme paramètre

La chaîne de remplacement peut inclure les modèles de remplacement spéciaux suivants:

let str = '$$double_dollars$$'
console.log(str.replace('$$double_dollars$$', '$$$$yes_double_dollars$$$$'));
// => $$yes_double_dollars$$

Pattern   Inserts  
$$        Inserts a "$".  
$&        Inserts the matched substring.  
$`        Inserts the portion of the string that precedes the matched substring.  
$'        Inserts the portion of the string that follows the matched substring.  
$n        Where n is a positive integer less than 100, inserts the nth parenthesized  
          submatch string, provided the first argument was a RegExp object. 
          Note that this is 1-indexed.


0 commentaires