非常简单的小问题,但我不太明白该怎么做。
我需要用空格替换'_'的每个实例,并且'#'的每个实例都没有/空。
var string = '#Please send_an_information_pack_to_the_following_address:';
我试过这个:
string.replace('#','').replace('_', ' ');
我并没有真正链接这样的命令,但还有另一种方法可以在一个方法中进行吗?
答案 0 :(得分:399)
使用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';
为什么不连锁?我认为没有错。
答案 1 :(得分:47)
Chaining很酷,为什么要解雇呢?
无论如何,这是另一个选择:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
如果匹配==“#”,则替换将选择“”,否则选择“”。
[更新]对于更通用的解决方案,您可以将替换字符串存储在对象中:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
答案 2 :(得分:33)
在正则表达式上指定/g
(全局)标志以替换所有匹配而不是第一个匹配:
string.replace(/_/g, ' ').replace(/#/g, '')
要将一个字符替换为一个字符而将其他字符替换为其他字符,您无法真正解决需要对replace
进行两次单独调用的问题。您可以像Doorknob那样将它抽象为函数,尽管我可能会使用旧/新对象作为键/值对而不是平面数组。
答案 3 :(得分:32)
如果要替换多个字符,可以使用替换参数调用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
答案 4 :(得分:3)
你也可以试试这个:
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
指的是要替换的文字
这将取代不区分大小写的字符。要做其他事情,只需根据需要更改正则表达式标志。例如:对于区分大小写的替换:
new RegExp(find[i], 'g')
答案 5 :(得分:2)
您还可以将RegExp对象传递给替换方法,如
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
答案 6 :(得分:2)
这是一种没有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;
}
答案 7 :(得分:2)
请尝试:
替换多字符串
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";
答案 8 :(得分:2)
我不知道这对您有什么帮助,但是我想从字符串中删除<b>
和</b>
所以我用
mystring.replace('<b>',' ').replace('</b>','');
因此,基本上,如果您希望减少有限数量的字符并且不浪费时间,这将很有用。
答案 9 :(得分:1)
你可以试试这个:
str.replace(/[.-#]/g, 'replacechar');
这将替换。, - 和#替换你的replacechar!
答案 10 :(得分:1)
yourstring ='#Please send_an_information_pack_to_the_following_address:';
将'#'替换为''并将'_'替换为空格
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
newstring2是你的结果
答案 11 :(得分:1)
这是另一个使用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"
答案 12 :(得分:0)
<div>
<div class="side-a" style="background: red;text-align:center">ABC</div>
<div class="side-b" style="background: blue;text-align:center">DEF</div>
</div>
<div style="padding-top:50px;--wa:100px;--wb:50px;">
<div class="side-a" style="background: red;text-align:center">ABC</div>
<div class="side-b" style="background: blue;text-align:center">DEF</div>
</div>
<div style="padding-top:80px;--wa:150px;--wb:150px;">
<div class="side-a" style="background: red;text-align:center">ABC</div>
<div class="side-b" style="background: blue;text-align:center">DEF</div>
</div>
String.prototype.replaceAll = function(keydata,obj){
const keys = keydata.split('key');
返回Object.entries(obj).reduce((a,[key,val])=> a.replace(String.prototype.replaceAll=function(obj,keydata='key'){
const keys=keydata.split('key');
return Object.entries(obj).reduce((a,[key,val])=> a.replace(new RegExp(`${keys[0]}${key}${keys[1]}`,'g'),val),this)
}
const data='hids dv sdc sd {yathin} {ok}'
console.log(data.replaceAll({yathin:12,ok:'hi'},'{key}'))
,val),this)
}
const data ='hids dv sdc sd $ {yathin} $ {ok}' console.log(data.replaceAll('$ {key}',{yathin:12,ok:'hi'}))
答案 13 :(得分:0)
对于什么都不做,tckmn's answer是最好的。
如果您需要替换为与匹配项相对应的特定字符串,这是Voicu和Christophe的答案的一种变体,避免了重复匹配项,因此您不必记住在两个地方添加新的匹配项:>
const replacements = {
'’': "'",
'“': '"',
'”': '"',
'—': '---',
'–': '--',
};
const replacement_regex = new RegExp(Object
.keys(replacements)
// escape any regex literals found in the replacement keys:
.map(e => e.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
.join('|')
, 'g');
return text.replace(replacement_regex, e => replacements[e]);
答案 14 :(得分:0)
多个子字符串可以用一个简单的正则表达式替换。
例如,我们想把数字(123) 456-7890
变成1234567890
,我们可以这样做。
var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890
我们可以在 [] 之间传递要替换的子字符串,而要使用的字符串应该作为第二个参数传递给替换函数。
答案 15 :(得分:-1)
这是一个使用“减少”多次替换功能的“安全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);
}