首页 文章

如何使用JavaScript替换字符串中的所有点

提问于
浏览
384

我想在JavaScript字符串中替换所有出现的点( .

例如,我有:

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

我想得到: okay this is a string .

到目前为止我试过:

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

但最终将所有字符串替换为空格 .

14 回答

  • 6

    我在点上添加双反斜杠以使其工作 . 欢呼 .

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

    您需要转义 . ,因为它在正则表达式中具有"an arbitrary character"的含义 .

    mystring = mystring.replace(/\./g,' ')
    
  • 52

    还有一个易于理解的解决方案:)

    var newstring = mystring.split('.').join(' ');
    
  • 296
    /**
     * 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('.', ' '));
    

    比使用正则表达式更快......

    EDIT:
    也许在我做这个代码的时候我没有使用过jsperf . 但最终这种讨论毫无意义,性能差异不值得现实世界中代码的易读性,所以即使性能与正则表达式方法不同,我的答案仍然有效 .

    EDIT2:
    我创建了一个lib,允许您使用流畅的界面执行此操作:

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

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

  • -1
    str.replace(new RegExp(".","gm")," ")
    
  • 0

    对于这个简单的场景,我还建议使用javascript中内置的方法 .

    你可以试试这个:

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

    问候

  • 2

    这更简洁/可读,应该比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)'));
    
  • -5
    String.prototype.replaceAll = function(character,replaceChar){
        var word = this.valueOf();
    
        while(word.indexOf(character) != -1)
            word = word.replace(character,replaceChar);
    
        return word;
    }
    
  • 0

    这是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 = "My Name is George";
    var newText = myText.replaceAll("George","Michael");

  • 691

    示例:我想将所有双引号(“)替换为单引号(')然后代码将是这样的

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

    @ 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
    String.prototype.replaceAll = function (needle, replacement) {
        return this.replace(new RegExp(needle, 'g'), replacement);
    };
    
  • 22

    您可以使用RegExp javasscript对象替换所有出现的任何字符串/字符 .

    这是代码,

    var mystring = 'okay.this.is.a.string';
    
    var patt = new RegExp("\\.");
    
    while(patt.test(mystring)){
    
      mystring  = mystring .replace(".","");
    
    }
    
  • 13
    var mystring = 'okay.this.is.a.string';
    var myNewString = escapeHtml(mystring);
    
    function escapeHtml(text) {
    if('' !== text) {
        return text.replace(/&/g, "&")
                   .replace(/&lt;/g, "<")
                   .replace(/&gt;/g, ">")
                   .replace(/\./g,' ')
                   .replace(/&quot;/g, '"')
                   .replace(/&#39/g, "'");
    }
    

相关问题