一个非常简单的小问题,但是我不太明白该怎么做。
我需要将'_'的每个实例替换为空格,并将'#'的每个实例替换为空/空。
var string = '#Please send_an_information_pack_to_the_following_address:';
我已经试过了:
string.replace('#','').replace('_', ' ');
我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗?
一个非常简单的小问题,但是我不太明白该怎么做。
我需要将'_'的每个实例替换为空格,并将'#'的每个实例替换为空/空。
var string = '#Please send_an_information_pack_to_the_following_address:';
我已经试过了:
string.replace('#','').replace('_', ' ');
我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗?
Answers:
使用OR运算符(|
):
var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"
您还可以使用字符类:
str.replace(/[#_]/g,'');
如果您想用一件事替换哈希值,而用另一件事替换下划线,那么您只需要链接即可。但是,您可以添加一个原型:
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';
但是为什么不连锁呢?我认为这没有错。
#|_
是[#_]
,您不妨使用它+
来匹配任何连续的比赛以提高性能
str.replace(/[+ -]/g,'');
在中间插入另一个符号。
链接很酷,为什么不考虑它呢?
无论如何,这是一次替换中的另一种选择:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
如果match ==“#”,替换将选择“”,否则将选择“”。
[更新]对于更通用的解决方案,您可以将替换字符串存储在一个对象中:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
var regex = new RegExp( Object.keys(replaceChars).join("|"), "g");
string.replace(regex,function(match) {return replaceChars[match];})
这使修改replaceChars更加容易。
如果您要替换多个字符,则可以使用replace String.prototype.replace()
参数调用,该参数是针对每次匹配调用的函数。您只需要一个代表字符映射的对象,该对象将在该函数中使用。
例如,如果你想a
与更换x
,b
与y
和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
var
用const
在这里。扩展的浏览器支持的替代方法:var s ='234abc567bbbbac'; s = s.replace(/[abc]/g, function(m) { return {'a':'x','b':'y','c':'z'}[m]; }); console.log(s);
var chars = {a:'1', b:'2', c:'3'}; var s = '123abc123'; var u = s.replace(/[abc]/g, function(m) { return chars[m]; }); WScript.echo(u);
您也可以尝试这样:
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
指要查找replace
的文本和要替换为的文本
这将替换不区分大小写的字符。否则,只需根据需要更改Regex标志即可。例如:对于区分大小写的替换:
new RegExp(find[i], 'g')
您可以尝试以下方法:
str.replace(/[.#]/g, 'replacechar');
这将用您的replacechar替换。,-和#!
这是没有RegEx的简单方法。
您可以根据需要原型化和/或缓存事物。
// 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,'')
sed
y命令或Unix tr
),这似乎是正确的答案。
您还可以将RegExp对象传递给replace方法,例如
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
replace
电话-这无助于避免这种情况。
yourstring ='#Please send_an_information_pack_to_the_following_address:';
用''替换'#'并用空格替换'_'
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
newstring2是您的结果
var str = '#this #is__ __#a test###__';
中清楚地看到此字符串中明显有多个空格。
这是另一个使用String Prototype的版本。请享用!
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"
这是使用“减少”多次替换功能的“安全HTML”功能(此功能将每次替换应用于整个字符串,因此替换之间的依赖性非常重要)。
// Test:
document.write(SafeHTML('<div>\n\
x</div>'));
function SafeHTML(str)
{
const replacements = [
{'&':'&'},
{'<':'<'},
{'>':'>'},
{'"':'"'},
{"'":'''},
{'`':'`'},
{'\n':'<br>'},
{' ':' '}
];
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);
}