在一个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
代替b
用c
代替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是你的结果