Javascript 在一次替换调用中替换多个字符

Javascript 在一次替换调用中替换多个字符,javascript,jquery,Javascript,Jquery,非常简单的小问题,但我不太明白怎么做 我需要用空格替换“u”的每个实例,并用nothing/empty替换“#”的每个实例 var string='#请将信息包发送到以下地址:' 我试过这个: string.replace('#','').replace('#','') 我真的不喜欢像这样链接命令。是否有其他方法一次完成此操作?在正则表达式上指定/g(全局)标志以替换所有匹配项,而不仅仅是第一个匹配项: string.replace(/_/g, ' ').replace(/#/g, '') 要

非常简单的小问题,但我不太明白怎么做

我需要用空格替换“u”的每个实例,并用nothing/empty替换“#”的每个实例

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