web-dev-qa-db-ja.com

JavaScriptを使用して文字列内のすべてのドットを置き換える方法

JavaScript文字列内のすべてのドット(.)を置き換えたい

たとえば、私は持っています:

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

取得したい:okay this is a string

今のところ私が試した:

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

しかし、これですべての文字列がスペースに置き換えられてしまいます。

395
Omar Abid

.は正規表現では「任意の文字」という意味を持つため、エスケープする必要があります。

mystring = mystring.replace(/\./g,' ')
712
aefxx

理解しやすいもう一つの解決策:)

var newstring = mystring.split('.').join(' ');
297
Umesh Patil
/**
 * 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を使っていませんでした。しかし結局そのような議論は全く無意味です、パフォーマンスの違いは現実世界のコードの読みやすさの価値がないので、たとえパフォーマンスが正規表現アプローチと異なっていても私の答えはまだ有効です。

EDIT2:
私はあなたが流暢なインターフェースを使ってこれを行うことを可能にするライブラリを作成しました:

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

https://github.com/FagnerMartinsBrack/str-replace を参照してください。

52
Fagner Brack
str.replace(new RegExp(".","gm")," ")
22
macemers

この単純なシナリオでは、私はまたJavaScriptで構築されて来る方法を使用することをお勧めします。

あなたはこれを試すことができます:

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

ご挨拶

13
Victor

私はそれが機能するようにドットに二重円記号を追加します。応援します。

var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);
6
kittichart

これはより簡潔で読みやすく、Fagner Brackによって投稿されたものよりもパフォーマンスが良いはずです(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)'));
4
sstur

これは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( "George"、 "Michael");

2
scripto
String.prototype.replaceAll = function(character,replaceChar){
    var Word = this.valueOf();

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

    return Word;
}
2
Joel
String.prototype.replaceAll = function (needle, replacement) {
    return this.replace(new RegExp(needle, 'g'), replacement);
};
0
Danon

例:すべての二重引用符( ")を単一の引用符( ')に置き換えます。その場合、コードは次のようになります。

var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'
0
Neel Kamal

@ scriptoはprototypeなしでもう少し簡潔にしました:

function strReplaceAll(s, stringToFind, stringToReplace) {
    if (stringToFind === stringToReplace) return s;
    for (let index = s.indexOf(stringToFind); index != -1; index = s.indexOf(stringToFind))
        s = s.replace(stringToFind, stringToReplace);
    return s;
}

これがどうやって積み重なるかです: http://jsperf.com/replace-vs-split-join-vs-replaceall/68

0
A T
mystring.replace(new RegExp('.', "g"), ' ');
0
Idan