[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
, 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
답변
/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;
}