在一个替换呼叫中替换多个字符

时间:2013-05-16 00:08:41

标签: javascript jquery

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

我需要用空格替换'_'的每个实例,并且'#'的每个实例都没有/空。

var string = '#Please send_an_information_pack_to_the_following_address:';

我试过这个:

string.replace('#','').replace('_', ' ');

我并没有真正链接这样的命令,但还有另一种方法可以在一个方法中进行吗?

16 个答案:

答案 0 :(得分:399)

使用OR运算符(|):

var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"

您还可以使用字符类:

str.replace(/[#_]/g,'');

Fiddle

如果你想用一个东西替换散列而用另一个东西替换下划线,那么你只需要链接。但是,您可以添加原型:

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替换为xb替换为yc替换为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, " ");

Javascript RegExp

答案 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 = [
        {'&':'&amp;'},
        {'<':'&lt;'},
        {'>':'&gt;'},
        {'"':'&quot;'},
        {"'":'&apos;'},
        {'`':'&grave;'},
        {'\n':'<br>'},
        {' ':'&nbsp;'}
        ];
    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);
    }