在JavaScript中查找和替换不匹配的单词

时间:2019-03-02 08:55:43

标签: javascript regex replace

以下示例显示了如何将匹配的单词替换为大写。

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);输出是

  

Blue先生有一个BLUE HOUSE和一个BLUE CAR。

但是我需要将不匹配的单词大写。

  

蓝先生有一座蓝色的房子和一辆蓝色的汽车。

我尝试了以下代码。但它不起作用

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 :(得分:3)

匹配一个单词的开头(单词边界,用\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不会被匹配)。

!在正则表达式中没有什么意义,它只与文字!相匹配,而您的字符串在任何地方都不包含

答案 1 :(得分:0)

您可以不使用正则表达式。首先在每个空格上进行分割,然后检查其是否与这些单词匹配或不改变大小写

command not found

答案 2 :(得分:0)

您可能还会在匹配单词char (\w+)或单词边界\b的1+次上进行拆分。将交替值添加到数组中,然后将mapincludes结合使用:

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