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

Oma*_*bid 410 javascript string replace

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

例如,我有:

var mystring = 'okay.this.is.a.string';
Run Code Online (Sandbox Code Playgroud)

我想得到:okay this is a string.

到目前为止我试过:

mystring.replace(/./g,' ')
Run Code Online (Sandbox Code Playgroud)

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

aef*_*fxx 745

你需要逃避.它,因为它在正则表达式中具有"任意字符"的含义.

mystring = mystring.replace(/\./g,' ')
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清,\逃脱正则表达式中的特殊字符,如.在这种情况下 (24认同)
  • @Webwoman 这就是表达式末尾的“g”修饰符的用途。将其视为 (g) 全局。 (2认同)

Ume*_*til 298

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

var newstring = mystring.split('.').join(' ');
Run Code Online (Sandbox Code Playgroud)

  • @HaggleLad因为你不需要乱用正则表达式 (24认同)
  • @BetoFrega没有什么能比得上你的案例的经验数据:).感谢您提供链接! (9认同)
  • 这不比regexing慢吗? (5认同)
  • 如果使用RegExp,则需要将正则表达式存储在循环外部的单独变量中.编译/解释正则表达式需要一些时间,但一旦编译,它可以非常快速地使用.请尝试我做的这些测试:http://jsperf.com/replace-vs-split-join-vs-replaceall/23 (3认同)

Fag*_*ack 52

/**
 * 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('.', ' '));
Run Code Online (Sandbox Code Playgroud)

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

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

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

replace('.').from('okay.this.is.a.string').with(' ');
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/FagnerMartinsBrack/str-replace.


mac*_*ers 22

str.replace(new RegExp(".","gm")," ")
Run Code Online (Sandbox Code Playgroud)


Vic*_*tor 14

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

你可以试试这个:

"okay.this.is.a.string".split(".").join("")
Run Code Online (Sandbox Code Playgroud)

问候


小智 6

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

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


Raz*_*Raz 6

replaceAll(search, replaceWith)[ 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 "
    
Run Code Online (Sandbox Code Playgroud)

replaceAll()将所有出现的 替换searchreplaceWith

replace()它实际上与使用[ MDN ] 和全局正则表达式(*)相同,只是replaceAll()在我看来更具可读性。

(*) 表示它将匹配所有出现的情况。


重要的是()如果您选择正则表达式:

使用 a 时,regexp您必须设置全局(“g”)标志;否则,它将抛出 TypeError:“replaceAll 必须使用全局 RegExp 调用”。