Javascript 在一次替换调用中替换多个字符
非常简单的小问题,但我不太明白怎么做 我需要用空格替换“u”的每个实例,并用nothing/empty替换“#”的每个实例Javascript 在一次替换调用中替换多个字符,javascript,jquery,Javascript,Jquery,非常简单的小问题,但我不太明白怎么做 我需要用空格替换“u”的每个实例,并用nothing/empty替换“#”的每个实例 var string='#请将信息包发送到以下地址:' 我试过这个: string.replace('#','').replace('#','') 我真的不喜欢像这样链接命令。是否有其他方法一次完成此操作?在正则表达式上指定/g(全局)标志以替换所有匹配项,而不仅仅是第一个匹配项: string.replace(/_/g, ' ').replace(/#/g, '') 要
var string='#请将信息包发送到以下地址:'代码>
我试过这个:
string.replace('#','').replace('#','')代码>
我真的不喜欢像这样链接命令。是否有其他方法一次完成此操作?在正则表达式上指定/g
(全局)标志以替换所有匹配项,而不仅仅是第一个匹配项:
string.replace(/_/g, ' ').replace(/#/g, '')
要用一个东西替换一个字符,用另一个东西替换另一个字符,您真的需要两个单独的调用replace
。您可以像DoorKnop那样将其抽象为函数,尽管我可能会让它将一个包含新旧键/值对的对象作为键/值对,而不是平面数组 使用OR运算符(|
):
您还可以使用字符类:
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';
但为什么不戴链子呢?我看不出有什么问题。您还可以将RegExp对象传递给replace方法,如
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
链接很酷,为什么要放弃它
无论如何,这里有一个替换中的另一个选项:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
替换将选择“如果匹配==”#“,”如果不匹配
[更新]对于更通用的解决方案,您可以将替换字符串存储在对象中:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
这里有一个不使用正则表达式的简单方法。
您可以根据需要创建原型和/或缓存内容
// 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;
}
//示例:translate('laded','abcdef','123456')返回'61454'
函数转换(s、sFrom、sTo){
对于(var out='',i=0;i
您也可以尝试以下方法:
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);
str.replace(/[.#]/g, 'replacechar');
你可以试试这个:
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);
str.replace(/[.#]/g, 'replacechar');
这将用你的replacechar替换.,-和# 如果要替换多个字符,可以调用,替换参数是为每个匹配调用的函数。您所需要的只是一个表示将在该函数中使用的角色映射的对象
例如,如果要将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
yourstring='(请将信息包发送到以下地址:)
用“”替换“#”,用空格替换“#”
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
newstring2是您的结果请尝试:
- 替换多字符串
var str=”http://www.abc.xyz.com";
str=str.replace(/http:| www.com/g')//str是“/.abc.xyz”
- 替换多字符
var str=“a.b.c.d,e,f,g,h”;
str=str.replace(/[,]/g',)//str为“abcdefgh”代码>
祝你好运 我不知道这是否会有多大帮助,但我想从字符串中删除
和
所以我用
mystring.replace('<b>',' ').replace('</b>','');
mystring.replace(“”,).replace(“”,);
所以基本上,如果你想减少有限数量的角色,不要浪费时间,这将是有用的 这里是另一个使用字符串原型的版本。享受吧
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"
这是一个使用“reduce”多重替换函数的“safe HTML”函数(该函数将每个替换应用于整个字符串,因此替换之间的依赖关系非常重要)
//测试:
document.write(安全HTML)('\n\
(x);;
函数SafeHTML(str)
{
常量替换=[
{&:'&;},
{'':''},
{'"':'"'},
{“':”&apos;},
{'`:'&grave;'},
{'\n':'
'},
{' ':' '}
];
返回replaceManyStr(replacements,str);
}//HTMLToSafeHTML
函数replaceManyStr(replacements,str)
{
返回replacements.reduce((acum,t)=>acum.replace(newregexp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]),str);
}
String.prototype.replaceAll=function(obj,keydata='key'){
const keys=keydata.split('key');
返回Object.entries(obj).reduce((a[key,val])=>a.replace(新的RegExp(`${keys[0]}${key}${keys[1]}`,'g'),val),这个)
}
const data='hids dv sdc sd{yathin}{ok}'
log(data.replaceAll({yathin:12,ok:'hi'},{key}'))
对于不替换,是最好的
如果您需要替换为对应于匹配的特定字符串,这里是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]);
可以用简单的正则表达式替换多个子字符串。
例如,我们想将编号(123)456-7890
转换为1234567890
,我们可以按如下操作
var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890
我们可以在[]之间传递要替换的子字符串,而要使用的字符串应作为第二个参数传递给替换函数。我如何也包含哈希?这很酷,但我需要用不为空的空格替换下划线,可以这样做吗,但你还是帮助我更好地理解了替换表达式的工作原理:)你的原型不工作了?你能提供一个关于fiddle的例子吗,我一直在出错||
的另一个选项是[#|]
,你也可以使用+
匹配任何连续的匹配来提高性能谢谢。。。如果需要替换空格和其他符号str.replace(/[+-]/g')代码>只在中间放置空白。看到这个问题的答案:OP不想链接<代码>替换< /Calp>调用-这不帮助避免。我知道你没有声明它,但是仅仅使用正则表达式不是更优雅吗?代码>str.replace(/#|)(/ug',)
@Shan
var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890