在一个replace调用中replace多个字符

很简单的小问题,但我不太明白如何去做。

我需要用空格replace'_'的每个实例,并且用'#'replace每个空/空的实例。

var string = '#Please send_an_information_pack_to_the_following_address:';

我试过这个:

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

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

使用OR运算符( | ):

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

你也可以使用一个字符类:

 str.replace(/[#_]/g,''); 

小提琴

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

 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'; 

但为什么不链接? 我看没有错。

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

无论如何,这是一个替代的另一种select:

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

replace将select“”如果匹配==“#”,“”如果不是。

[更新]对于更通用的解决scheme,您可以将replacestring存储在一个对象中:

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

在正则expression式中指定/g (全局)标志来replace所有匹配,而不仅仅是第一个:

 string.replace(/_/g, ' ').replace(/#/g, '') 

用一个东西和一个不同的字符replace一个字符与其他东西,你不能真正避开需要两个单独的电话来replace 。 你可以像Doorknob那样把它抽象成一个函数,尽pipe我可能会用一个新旧对象作为键/值对而不是一个平面数组。

你也可以试试这个:

 function replaceStr(str, find, replace) { for (var i = 0; i < find.length; i++) { str = str.replace(new RegExp(find[i], 'gi'), replace[i]); } return str; } var text = "#here_is_the_one#"; var find = ["#","_"]; var replace = ['',' ']; text = replaceStr(text, find, replace); console.log(text); 

find是指要find的文本,并replace为要replace的文本

这将被replace为不区分大小写的字符。 要做其他事情,只需根据需要更改正则expression式标志。 例如:为了区分大小写replace:

 new RegExp(find[i], 'g') 

如果你想replace多个字符,你可以调用String.prototype.replace() ,replace参数是每个匹配被调用的函数。 所有你需要的是一个代表你将在那个函数中使用的字符映射的对象。

例如,如果你想用x代替,用y代替bc代替z ,你可以这样做:

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

输出234xyz567yyyyxz

您也可以将RegExp对象传递给replace方法

 var regexUnderscore = new RegExp("_", "g"); //indicates global match var regexHash = new RegExp("#", "g"); string.replace(regexHash, "").replace(regexUnderscore, " "); 

Javascript RegExp

这是一个简单的方法来做到这一点没有正则expression式。
你可以根据需要原型和/或caching的东西。

 // Example: translate( 'faded', 'abcdef', '123456' ) returns '61454' function translate( s, sFrom, sTo ){ for ( var out = '', i = 0; i < s.length; i++ ){ out += sTo.charAt( sFrom.indexOf( s.charAt(i) )); } return out; } 

你可以试试这个:

 str.replace(/[.-#]/g, 'replacechar'); 

这将取代。, – 和#你的replacechar!

请尝试:

  • replace多个string

    var str =“ http://www.abc.xyz.com ”;
    str = str.replace(/http:|www|.com/g,''); // str是“//.abc.xyz”

  • replace多个字符

    var str =“abcd,e,f,g,h”; str = str.replace(/[.,]] g,''); // str是“abcdefgh”;

祝你好运!

yourstring ='#请send_an_information_pack_to_the_following_address:';

用''replace'#',用空格replace'_'

 var newstring1 = yourstring.split('#').join(''); var newstring2 = newstring1.split('_').join(' '); 

newstring2是你的结果