Replace multiple characters in one replace call
一个非常简单的小问题,但是我不太明白该怎么做。
我需要将'_'的每个实例替换为空格,并将'#'的每个实例替换为空/空。
我已经试过了:
我并不是真的像这样链接命令,但是有另一种方法可以做到这一点吗?
使用OR运算符(
1 2 | var str = '#this #is__ __#a test###__'; str.replace(/#|_/g,''); // result:"this is a test" |
您还可以使用字符类:
1 | str.replace(/[#_]/g,''); |
小提琴
如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型:
1 2 3 4 5 6 7 8 9 10 | 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'; |
为什么不连锁呢?我认为这没有错。
链接很酷,为什么不考虑它呢?
无论如何,这是一次替换中的另一种选择:
1 | string.replace(/#|_/g,function(match) {return (match=="#")?"":"";}) |
替换将选择" if match =="#",否则选择""。
[更新]对于更通用的解决方案,您可以将替换字符串存储在一个对象中:
1 2 | var replaceChars={"#":"" ,"_":"" }; string.replace(/#|_/g,function(match) {return replaceChars[match];}) |
在正则表达式上指定
1 | string.replace(/_/g, ' ').replace(/#/g, '') |
要用一个东西替换一个字符,而用其他东西替换另一个字符,您真的无法避免需要两次分别调用
如果要替换多个字符,则可以调用
例如,如果要用
1 2 3 4 | var chars = {'a':'x','b':'y','c':'z'}; var s = '234abc567bbbbac'; s = s.replace(/[abc]/g, m => chars[m]); console.log(s); |
输出:
您也可以尝试以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 | 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); |
这将替换不区分大小写的字符。否则,只需根据需要更改正则表达式标志即可。例如:对于区分大小写的替换:
1 | new RegExp(find[i], 'g') |
您可以尝试以下方法:
1 | str.replace(/[.#]/g, 'replacechar'); |
这将用您的replacechar替换。,-和#!
请试试:
-
替换多字符串
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";
祝好运!
这是没有RegEx的简单方法。
您可以根据需要原型化和/或缓存内容。
1 2 3 4 5 6 7 | // 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; } |
您还可以将RegExp对象传递给replace方法,例如
1 2 3 4 | var regexUnderscore = new RegExp("_","g"); //indicates global match var regexHash = new RegExp("#","g"); string.replace(regexHash,"").replace(regexUnderscore,""); |
Javascript RegExp
这是另一个使用String Prototype的版本。请享用!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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" |
我不知道这对您有什么帮助,但是我想从字符串中删除
所以我用
1 | mystring.replace('',' ').replace('',''); |
因此,基本上,如果您希望减少有限数量的字符并且不浪费时间,这将非常有用。
yourstring ='#Please send_an_information_pack_to_the_following_address:';
用''替换'#'并用空格替换'_'
1 2 | var newstring1 = yourstring.split('#').join(''); var newstring2 = newstring1.split('_').join(' '); |
newstring2是您的结果
这是一个使用"减少"多次替换功能的"安全HTML"功能(此功能将每次替换应用于整个字符串,因此替换之间的依赖性非常重要)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // Test: document.write(SafeHTML(' \ x')); function SafeHTML(str) { const replacements = [ {'&':'&'}, {'<':'<'}, {'>':'>'}, {'"':'"'}, {"'":''}, {'`':'`'}, {' ':''}, {' ':''} ]; return replaceManyStr(replacements,str); } // HTMLToSafeHTML function replaceManyStr(replacements,str) { return replacements.reduce((accum,t) => accum.replace(new RegExp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]]),str); } |