1
votes

Rechercher et remplacer les mots non correspondants dans JavaScript

Voici l'exemple qui montre comment remplacer les mots correspondants en majuscules.

var str = "Mr Blue has a blue house and a blue car.";
    var res = str.replace(/!(blue|house|car)/g, function (x) {
        return x.toUpperCase();
      });

console.log (res); La sortie est

M. Blue a une MAISON BLEUE et une VOITURE BLEUE.

Mais j'ai besoin des mots qui ne correspondent pas en majuscules.

MR BLUE A une maison bleue ET une voiture bleue.

J'ai essayé avec le code ci-dessous. Mais ça ne marche pas

var str = "Mr Blue has a blue house and a blue car.";
    var res = str.replace(/(blue|house|car)/g, function (x) {
        return x.toUpperCase();
      });


0 commentaires

3 Réponses :


3
votes

Faites correspondre le début d'un mot (limite de mot, avec \ b ), anticipation négative pour ces trois mots suivis des limites de mots, puis faites correspondre les caractères du mot et utilisez votre fonction de remplacement:

var str = "Mr Blue has a blue house and a blue car.";
var res = str.replace(/\b(?!blue\b|house\b|car\b)\w+/g, function(x) {
  return x.toUpperCase();
});
console.log(res);

Les limites de mots à la fin de chacun de ces trois mots sont nécessaires pour que maisons soient correctement mises en correspondance (et uniquement house , en tant que mot, ne correspondra pas).

! ne veut pas dire grand-chose dans une expression régulière, il correspondra simplement à un ! littéral, que votre chaîne ne contient nulle part.


0 commentaires

0
votes

Vous pouvez le faire sans regex. d'abord divisé sur chaque espace et ensuite vérifier s'il correspond à ces mots ou pas en conséquence changer la casse

var str = "Mr Blue has a blue house and a blue car.";
let arr = ['blue','house','car']

var res = str.split(/\b/).reduce( (op,inp) => {
  if( !arr.includes(inp) ){
    op += inp.toUpperCase()
  } else {
    op += inp
  }
  return op
},'')
console.log(res.trim());


2 commentaires

car devient en majuscule, ce qui est incorrect. Causé par un point après la voiture que vous devez gérer.


@PushpeshKumarRajwanshi oh ouais. fixé. merci d'avoir souligné



0
votes

Vous pouvez également diviser sur la correspondance 1+ fois un caractère de mot (\ w +) ou sur une limite de mot \ b . Ajoutez les valeurs de l'alternance à un tableau et utilisez map en combinaison avec inclut :

let str = "Mr Blue has a blue house and a blue car.";
let words = ["blue", "house", "car"];
str = str.split(/\b/g).map(x => !words.includes(x) ? x.toUpperCase() : x).join('');
console.log(str);


2 commentaires

car devient en majuscule, ce qui est incorrect. Causé par un point après la voiture que vous devez gérer.


@PushpeshKumarRajwanshi Ha, vous avez raison, merci! Je l'ai mis à jour.