[javascript] 한 번의 교체 호출에서 여러 문자 교체

아주 간단한 작은 질문이지만 어떻게 해야하는지 잘 모르겠습니다.

‘_’의 모든 인스턴스를 공백으로 바꾸고 ‘#’의 모든 인스턴스를 아무것도 / 비어 있지 않아야합니다.

var string = '#Please send_an_information_pack_to_the_following_address:';

나는 이것을 시도했다 :

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

나는 이와 같은 명령을 연결하는 것을 정말로 좋아하지 않습니다. 한 가지 방법으로 다른 방법이 있습니까?



답변

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';

그래도 왜 체인을하지 않습니까? 나는 그것에 아무런 문제가 없다.


답변

체이닝이 멋지다

어쨌든, 여기에 하나의 대체 옵션이 있습니다.

string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})

대체는 “= match # =”# “인 경우” “, 그렇지 않은 경우” “를 선택합니다.

[업데이트]보다 일반적인 솔루션을 위해 대체 문자열을 객체에 저장할 수 있습니다.

var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})


답변

여러 문자를 바꾸려면 String.prototype.replace()각 일치 항목에 대해 호출되는 함수 인 replacement 인수를 사용 하여 with를 호출 할 수 있습니다 . 해당 기능에 사용할 문자 매핑을 나타내는 객체 만 있으면됩니다.

당신이 원하는 경우 예를 들어, a교체 x, byc함께 z, 당신은 이런 식으로 뭔가를 할 수 있습니다 :

var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);

출력 :234xyz567yyyyxz


답변

/g정규식에 (global) 플래그를 지정하여 첫 번째 항목 대신 모든 일치 항목을 바꾸십시오.

string.replace(/_/g, ' ').replace(/#/g, '')

한 캐릭터를 다른 것으로 바꾸고 다른 캐릭터를 다른 것으로 바꾸려면에 대해 두 번의 별도 호출이 필요하지 않습니다 replace. Doorknob처럼 함수로 추상화 할 수 있지만 플랫 배열 대신 키 / 값 쌍으로 old / new를 가진 객체를 가져야 할 것입니다.


답변

당신은 또한 이것을 시도 할 수 있습니다 :

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;
}