Как заменить все точки в строке, используя JavaScript - PullRequest
398 голосов
/ 06 марта 2010

Я хочу заменить все вхождения точки (.) в строке JavaScript

Например, у меня есть:

var mystring = 'okay.this.is.a.string';

Я хочу получить: okay this is a string.

Пока я пробовал:

mystring.replace(/./g,' ')

но в итоге все строки заменяются пробелами.

Ответы [ 15 ]

720 голосов
/ 06 марта 2010

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

mystring = mystring.replace(/\./g,' ')
298 голосов
/ 05 января 2012

Еще одно решение, которое легко понять:)

var newstring = mystring.split('.').join(' ');
52 голосов
/ 29 марта 2012
/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
    var _token;
    var str = this + "";
    var i = -1;

    if ( typeof token === "string" ) {

        if ( ignoreCase ) {

            _token = token.toLowerCase();

            while( (
                i = str.toLowerCase().indexOf(
                    _token, i >= 0 ? i + newToken.length : 0
                ) ) !== -1
            ) {
                str = str.substring( 0, i ) +
                    newToken +
                    str.substring( i + token.length );
            }

        } else {
            return this.split( token ).join( newToken );
        }

    }
return str;
};

alert('okay.this.is.a.string'.replaceAll('.', ' '));

Быстрее, чем с помощью регулярных выражений ...

РЕДАКТИРОВАТЬ:
Возможно, в то время, когда я сделал этот код, я не использовал jsperf.Но в конце концов, такое обсуждение совершенно бессмысленно, разница в производительности не стоит разборчивости кода в реальном мире, поэтому мой ответ остается в силе, даже если производительность отличается от подхода регулярных выражений.

РЕДАКТИРОВАТЬ2:
Я создал библиотеку, которая позволяет вам делать это с помощью свободного интерфейса:

replace('.').from('okay.this.is.a.string').with(' ');

См. https://github.com/FagnerMartinsBrack/str-replace.

22 голосов
/ 23 мая 2012
str.replace(new RegExp(".","gm")," ")
13 голосов
/ 09 октября 2013

Для этого простого сценария я бы также рекомендовал использовать методы, встроенные в javascript.

Вы можете попробовать это:

"okay.this.is.a.string".split(".").join("")

Привет

6 голосов
/ 03 января 2013

Я добавляю двойную обратную косую черту к точке, чтобы она работала.Cheer.

var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);
4 голосов
/ 21 мая 2013

Это более сжато / читабельно и должно работать лучше, чем опубликованное Фагнером Брэком (toLowerCase не выполняется в цикле):

String.prototype.replaceAll = function(search, replace, ignoreCase) {
  if (ignoreCase) {
    var result = [];
    var _string = this.toLowerCase();
    var _search = search.toLowerCase();
    var start = 0, match, length = _search.length;
    while ((match = _string.indexOf(_search, start)) >= 0) {
      result.push(this.slice(start, match));
      start = match + length;
    }
    result.push(this.slice(start));
  } else {
    result = this.split(search);
  }
  return result.join(replace);
}

Использование:

alert('Bananas And Bran'.replaceAll('An', '(an)'));
2 голосов
/ 08 мая 2013

Вот еще одна реализация replaceAll. Надеюсь, это кому-нибудь поможет.

    String.prototype.replaceAll = function (stringToFind, stringToReplace) {
        if (stringToFind === stringToReplace) return this;
        var temp = this;
        var index = temp.indexOf(stringToFind);
        while (index != -1) {
            temp = temp.replace(stringToFind, stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    };

Тогда вы можете использовать его:

var myText = "Меня зовут Джордж";
var newText = myText.replaceAll ("Джордж", "Майкл");

2 голосов
/ 22 апреля 2013
String.prototype.replaceAll = function(character,replaceChar){
    var word = this.valueOf();

    while(word.indexOf(character) != -1)
        word = word.replace(character,replaceChar);

    return word;
}
0 голосов
/ 29 мая 2019
mystring.replace(new RegExp('.', "g"), ' ');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...