Найти и заменить не соответствующие слова в JavaScript - PullRequest
0 голосов
/ 02 марта 2019

В этом примере показано, как заменить соответствующие слова на прописные.

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);Выход:

У мистера Блю есть СИНИЙ ДОМ и СИНИЙ АВТОМОБИЛЬ.

Но мне нужны не совпадающие слова в верхнем регистре.

У МР СИНИХ есть синий дом И синяя машина.

Я пробовал с приведенным ниже кодом.Но это не работает

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();
      });

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Вы можете сделать это без регулярных выражений.сначала разбить на каждый пробел, а затем проверить, соответствуют ли они этим словам или нет, соответственно изменить регистр

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());
0 голосов
/ 02 марта 2019

Вы также можете разделить на соответствие 1+ раз слово char (\w+) или на границе слова \b.Добавьте значения чередования в массив и используйте map в сочетании с includes :

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);
0 голосов
/ 02 марта 2019

Соответствует началу слова (граница слова, с \b), отрицательный взгляд на эти три слова, за которыми следуют границы слова, затем сопоставьте символы слова и используйте функцию замены:

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);

Границы слова в конце каждого из этих трех слов необходимы для правильного соответствия houses (и только house как отдельного слова,не будет совпадать).

! ничего не значит в регулярном выражении, оно просто будет соответствовать литералу !, которого ваша строка нигде не содержит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...