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

时间:2010-03-06 00:10:19

标签: javascript string replace

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

例如,我有:

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

我想得到:okay this is a string

到目前为止,我试过了:

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

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

18 个答案:

答案 0 :(得分:716)

您需要转义.,因为它在正则表达式中具有“任意字符”的含义。

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

答案 1 :(得分:297)

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

var newstring = mystring.split('.').join(' ');

答案 2 :(得分: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('.', ' '));

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

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

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

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

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

答案 3 :(得分:22)

str.replace(new RegExp(".","gm")," ")

答案 4 :(得分:13)

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

你可以试试这个:

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

问候

答案 5 :(得分:6)

我在点上添加了双反斜杠以使其正常工作。助威。

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

答案 6 :(得分:4)

这更简洁/可读,应该比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)'));

答案 7 :(得分:2)

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

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

    return word;
}

答案 8 :(得分:2)

这是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”);

答案 9 :(得分:1)

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 "
    

replaceAll() 将所有出现的 search 替换为 replaceWith

这实际上与将 replace() [MDN] 与全局正则表达式 (*) 一起使用是一样的,只是 replaceAll() 在我看来更具可读性。

(*) 意味着它会匹配所有出现的。


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

<块引用>

使用 regexp 时,您必须设置全局 ("g") 标志; 否则,它会抛出一个类型错误:“replaceAll 必须用 一个全局 RegExp”。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

@ 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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

mystring.replace(new RegExp('.', "g"), ' ');

答案 14 :(得分:0)

最简单的方法

"Mr.".split('.').join("");

..............

控制台

enter image description here

答案 15 :(得分:-1)

您可以使用RegEx javascript对象替换所有出现的任何字符串/字符。

这是代码,

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

var patt = new RegExp("\\.");

while(patt.test(mystring)){

  mystring  = mystring .replace(".","");

}

答案 16 :(得分:-1)

let a = "曾经有一个国王。传播算子。让.ver.const.";

let data = a.replaceAll(".","");

答案:data = "曾经有一个国王传播运算符 let ver const";

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

答案 17 :(得分:-5)

var mystring = 'okay.this.is.a.string';
var myNewString = escapeHtml(mystring);

function escapeHtml(text) {
if('' !== text) {
    return text.replace(/&amp;/g, "&")
               .replace(/&lt;/g, "<")
               .replace(/&gt;/g, ">")
               .replace(/\./g,' ')
               .replace(/&quot;/g, '"')
               .replace(/&#39/g, "'");
}