Как заменить несколько слов в JavaScript - PullRequest
5 голосов
/ 24 января 2011

Я хочу заменить несколько слов в тексте, используя replace() в javascript, как я могу это сделать?

Например, если я хочу заменить, ' Дейв Чамберс, Дэвид Чамберс, Уилл Смит ' на ' Джеки Чан ' независимо от того, находятся ли они в верхнем или нижнем регистре, я должен постоянно повторять метод replace() для одной и той же строковой переменной каждый раз, то есть

var str = sometext.innerHTML;
str.replace('Dave Chambers', 'Jackie Chan');
str.replace('David Chambers', 'Jackie Chan');
str.replace('Will Smith', 'Jackie Chan');

Ответы [ 6 ]

12 голосов
/ 24 января 2011

Используйте регулярное выражение с генератором (|) и без учета регистра (/i):

var str = sometext.innerHTML,
    reg = /Dave Chambers|David Chambers|Will Smith/i;

str = str.replace(reg, "Jackie Chan"); 

Более короткое и более сложное регулярное выражение может быть:

/Dav(?:e|id) Chambers|Will Smith/i;

А если их может быть больше 1, добавьте глобальный модификатор (g), чтобы заменить все:

/Dav(?:e|id) Chambers|Will Smith/ig;

Подробнее о регулярных выражениях можно узнать здесь илис помощью поиска Google.Вы можете увидеть рабочую демонстрацию здесь .

2 голосов
/ 24 января 2011
str.replace(/(Dav(e|id) Chambers)|(Will Smith)/ig, 'Jackie Chan');
1 голос
/ 13 января 2014

Эта функция заменит любые слова в строке.

function wordInString(s, words, replacement){ 
  var re = new RegExp( '\\b' + words.join('|') + '\\b','gi');
  return s.replace(re, replacement);
}

// usage:
var str = 'did you, or did you not, get why?';
str = wordInString(str, ['YOU', 'get'], 'XXX');

console.log(str); // "did XXX, or did XXX not, XXX why?"
1 голос
/ 24 января 2011

Вы захотите использовать регулярные выражения, если хотите игнорировать регистр:

var str = sometext.innerHTML;
str.replace(/Dave Chambers/ig, 'Jackie Chan')
   .replace(/David Chambers/ig, 'Jackie Chan')
   .replace(/Will Smith/ig, 'Jackie Chan');

Вы можете сделать все это одним оператором, как описано выше, и я бы предпочел, так как он более читабелен.

0 голосов
/ 07 декабря 2017

Если вы хотите заменить какой-либо массив на массив, соблюдайте разделители, такие как "."или ",", я создал нечто подобное, что может вам помочь.

function arrayReplace( text, arrFrom, arrTo, caseSensitive ) {
  return text.
    replace(/</g," <<").
    replace(/>/g,">> ").
    replace(/([\.\;\,])/g," <$1> ").
    split(" ").
    map(
      function(value) {
        var pos = arrFrom.indexOf( caseSensitive ? value : value.toLowerCase() );
        if( pos == -1 ) {
          return value;
        } else {
          return arrTo[pos % arrTo.length];
        }
      }
    ).
    join(" ").
    replace(/( \<|\> )/g,"");
};

console.log( 
  arrayReplace(
    "First example. Trivial case",
    [ "example", "case"],
    [ "demo", "test" ]
  )
); // First demo. Trivial test

console.log( 
  arrayReplace(
    "Leaving earth, passing close to the sun, going to the moon.",
    [ "earth", "sun", "moon"],
    [ "EARTH", "SUN", "MOON"]
  )
); // Leaving EARTH, passing close to the SUN, going to the MOON.

console.log( 
  arrayReplace(
    "Leaving earth, passing close to the sun, going to the moon.",
    [ "earth", "sun", "moon"],
    [ "PLANET"]
  )
); // Leaving PLANET, passing close to the PLANET, going to the PLANET.

console.log( 
  arrayReplace(
    "Leaving earth, passing close to the sun, going to the moon.",
    [ "earth", "sun", "moon"],
    [ "PLANET", "STAR" ]
  )
); // Leaving PLANET, passing close to the STAR, going to the PLANET.

console.log( 
  arrayReplace(
    "Rain rain, goes away, no one wants you any way.",
    [ "rain", "a"],
    [ "pig", "x"]
  )
);
// pig pig, goes away, no one wants you any way.

console.log( 
  arrayReplace(
    "Testing the <<function>>. Replacing, in <any> case. Even <the ;funny; ones>.",
    [ "funny", "even", "function" ],
    [ "complex", "including", "code" ]
  )
); // Testing the <<code>>. Replacing, in <any> case. including <the ;complex; ones>.
0 голосов
/ 05 июля 2015

ответ vsync помог мне выделить слово целиком innerHTML. Это можно использовать для вопроса и для многих других вещей, спасибо!

function highlightWord(word) {
    // get your current div content by id
    var string = document.getElementById('your-id').innerHTML;

    // set word to highlight
    var newWord = '<mark>' + word + '</mark>';

    // do replacement with regular expression
    var allWords = new RegExp( '\\b' + word + '\\b','gi');
    var newString = string.replace(allWords, newWord);

    // set your new div content by id
    document.getElementById('your-id').innerHTML = newString;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...