在一个替换呼叫中替换多个字符

Sha*_*ins 224 javascript jquery

非常简单的小问题,但我不太明白该怎么做.

我需要用空格替换'_'的每个实例,并且'#'的每个实例都没有/空.

var string = '#Please send_an_information_pack_to_the_following_address:';

我试过这个:

string.replace('#','').replace('_', ' ');

我不是真的链接这样的命令,但还有另一种方法可以做到这一点吗?

Doo*_*nob 449

使用OR运算符(|):

var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"
Run Code Online (Sandbox Code Playgroud)

您还可以使用字符类:

str.replace(/[#_]/g,'');
Run Code Online (Sandbox Code Playgroud)

小提琴

如果你想用一个东西替换散列而用另一个东西替换下划线,那么你只需要链接.但是,您可以添加原型:

String.prototype.allReplace = function(obj) {
    var retStr = this;
    for (var x in obj) {
        retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
    }
    return retStr;
};

console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';
Run Code Online (Sandbox Code Playgroud)

为什么不连锁?我认为没有错.

  • 这很酷,但我需要用非空空格替换下划线,我可以这样做吗? (5认同)
  • ##的另一个选项是[#_],您也可以使用+匹配任何连续的匹配项以提高性能。 (3认同)
  • 很感谢...如果需要替换空格和另一个符号`str.replace(/ [+ - ]/g,'');`只需在中间放置空格. (3认同)

Chr*_*phe 48

链接很酷,为什么要解雇呢?

无论如何,这里有一个替换的另一个选项:

string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
Run Code Online (Sandbox Code Playgroud)

如果匹配=="#",则替换将选择"",否则选择"".

[更新]对于更通用的解决方案,您可以将替换字符串存储在对象中:

var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
Run Code Online (Sandbox Code Playgroud)

  • 采取额外的步骤:`var regex = new RegExp(Object.keys(replaceChars).join("|"),"g");``string.replace(regex,function(match){return replaceChars [match] ;})`这使得更容易修改replaceChars. (3认同)

Mar*_*eed 37

/g在正则表达式上指定(全局)标志以替换所有匹配而不是仅替换第一个匹配:

string.replace(/_/g, ' ').replace(/#/g, '')
Run Code Online (Sandbox Code Playgroud)

要用一个东西替换一个角色而用另一个东西替换另一个角色,你无法真正解决需要两个单独的调用replace.您可以像Doorknob那样将它抽象为函数,尽管我可能会使用旧/新对象作为键/值对而不是平面数组.


Voi*_*icu 34

如果要替换多个字符,可以String.prototype.replace()使用replacement参数调用,该函数是为每个匹配调用的函数.您只需要一个表示您将在该函数中使用的字符映射的对象.

例如,如果您想要a替换x,bwith ycwith z,您可以执行以下操作:

var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
Run Code Online (Sandbox Code Playgroud)

输出:234xyz567yyyyxz

  • 您可以在一行中替换多个: `string.replace(/[#_]/g, x => ({'_': ' ', '#': ''})[x]);` 请注意 ` ()` 围绕对象 - 没有它们将会出错。 (4认同)
  • 由于您使用 ES6(箭头函数),因此您还应该在此处将“var”替换为“const”。扩展浏览器支持的替代方法:`var s ='234abc567bbbbac'; s = s.replace(/[abc]/g, function(m) { return {'a':'x','b':'y','c':'z'}[m]; }) ; console.log(s);` (3认同)

小智 8

多个子字符串可以用简单的正则表达式替换。例如,我们想将数字(123) 456-7890变成1234567890,我们可以这样做。

var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890
Run Code Online (Sandbox Code Playgroud)

我们可以在 [] 之间传递要替换的子字符串,并且要使用的字符串应作为第二个参数传递给替换函数。


kar*_*mai 5

你可以试试这个:

str.replace(/[.#]/g, 'replacechar');
Run Code Online (Sandbox Code Playgroud)

这将用您的 replacechar 替换 .,- 和 # !


小智 5

请尝试:

  • 替换多字符串

    var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, ''); //str is "//.abc.xyz"

  • 替换多字符

    var str = "a.b.c.d,e,f,g,h"; str = str.replace(/[.,]/g, ''); //str is "abcdefgh";

祝你好运!


Hri*_*ale 5

我不知道这有多大帮助,但我想从我的字符串中删除<b></b>

所以我用

mystring.replace('<b>',' ').replace('</b>','');
Run Code Online (Sandbox Code Playgroud)

所以基本上如果你想减少有限数量的字符并且不要浪费时间,这将是有用的。


Pos*_*hin 5

更新

您现在可以在本机使用replaceAll

过时的答案

这是另一个使用字符串原型的版本。享受!

String.prototype.replaceAll = function(obj) {
    let finalString = '';
    let word = this;
    for (let each of word){
        for (const o in obj){
            const value = obj[o];
            if (each == o){
                each = value;
            }
        }
        finalString += each;
    }
    
    return finalString;
};

'abc'.replaceAll({'a':'x', 'b':'y'}); //"xyc"
Run Code Online (Sandbox Code Playgroud)

  • 这是最糟糕的答案。您不应该覆盖您自己的官方规范中接受的功能。https://tc39.es/ecma262/multipage/text-processing.html#sec-string.prototype.replaceall (2认同)