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

例如,我有:

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

我想要得到:这是一个字符串。

到目前为止,我尝试了:

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

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


当前回答

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

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

    return word;
}

其他回答

让a = "从前有一个国王。opeator传播。让。版本。const。”;

let data = a.r eall (".","");

答案:data = "曾经有一个king spread operator let ver const";

您需要对该字符串使用replaceAll()方法。

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

你可以试试这个:

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

问候

我加了双反斜杠的点,使它工作。欢呼。

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

补充(搜索,补充)[MDN]

 ".a.b.c.".replaceAll('.', ' ')
 // result: " a b c "

 // Using RegEx. You MUST use a global RegEx.
 ".a.b.c.".replaceAll(/\./g, ' ')
 // result: " a b c "
    

replaceAll()用replaceWith替换所有出现的搜索。

它实际上与使用全局regex(*)的replace() [MDN]相同,在我的视图中,仅仅是replaceAll()更具可读性。

(*)表示它将匹配所有的事件。


重要(!)如果你选择regex:

当使用regexp时,你必须设置全局(“g”)标志; 否则,它将抛出TypeError: "replaceAll必须被调用 一个全局RegExp”。

/**
 * 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。