1개의 치환콜로 여러 문자를 치환하다
'_'의 모든 인스턴스를 공백으로 바꾸고 '#'의 모든 인스턴스를 아무것도 또는 비워 두어야 합니다.
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';
왜 쇠사슬을 매지 않는 거죠?난 그게 문제될 게 없다고 본다.
복수의 문자를 치환하는 경우는, 일치 마다 호출되는 함수로서 replacement 인수를 사용해 를 호출할 수 있습니다.필요한 것은 해당 함수로 사용할 문자 매핑을 나타내는 객체입니다.
를 들어, 「」가 는,a
로 x
,b
y
, , , , 입니다.c
z
을 사용하다
const chars = {'a':'x','b':'y','c':'z'};
let s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
출력:234xyz567yyyyxz
체인은 멋진데, 왜 무시해?
어쨌든, 여기 다른 옵션이 있습니다.
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
치환자는 match=="#", 그렇지 않으면 ""를 선택합니다.
[업데이트] 보다 일반적인 솔루션에서는 대체 문자열을 개체에 저장할 수 있습니다.
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
명기해 주세요./g
글로벌)하여 첫 합니다.
string.replace(/_/g, ' ').replace(/#/g, '')
한로, 글자로 는 두 의 콜이 하다, 라고 하는 수 .replace
Doorknob과 같은 함수로 추상화할 수 있습니다.단, 플랫 어레이가 아닌 old/new의 오브젝트를 키/값의 쌍으로 받아들이도록 하겠습니다.
이게 얼마나 도움이 될지는 모르겠지만 제거하려고요<b>
★★★★★★★★★★★★★★★★★」</b>
스트링에서
그래서 저는
mystring.replace('<b>',' ').replace('</b>','');
따라서 기본적으로 글자 수를 줄이고 시간을 낭비하지 않는 것이 좋습니다.
복수의 기판을 단순한 정규식으로 대체할 수 있다.를 들어, '', '아까', '아까', '아까'라는를 만들어요.(123) 456-7890
1234567890
이데올로기 때문에
var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890
[] 사이에 교체할 서브스트링을 전달할 수 있으며 대신 사용할 스트링은 치환 함수에 대한 두 번째 파라미터로 전달되어야 합니다.
두 번째 업데이트
저는 생산에서 사용하기 위해 다음과 같은 기능을 개발했습니다.아마 다른 사람에게 도움이 될 것입니다.기본적으로 네이티브의 replaceAll Javascript 함수의 루프이며 regex를 사용하지 않습니다.
function replaceMultiple(text, characters){
for (const [i, each] of characters.entries()) {
const previousChar = Object.keys(each);
const newChar = Object.values(each);
text = text.replaceAll(previousChar, newChar);
}
return text
}
사용법은 매우 간단합니다.OP의 예를 사용하면 다음과 같습니다.
const text = '#Please send_an_information_pack_to_the_following_address:';
const characters = [
{
"#":""
},
{
"_":" "
},
]
const result = replaceMultiple(text, characters);
console.log(result); //'Please send an information pack to the following address:'
갱신하다
이제 replaceAll을 네이티브로 사용할 수 있습니다.
오래된 답변
다음은 String 프로토타입을 사용한 다른 버전입니다.맛있게 드세요!
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"
다음과 같이 시도해 볼 수 있습니다.
str.replace(/[.#]/g, 'replacechar');
.-와 #가 치환됩니다!
시험해 보세요:
다중 문자열을 바꿉니다.
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";
행운을 빕니다.
여기 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;
}
다음과 같은 방법도 있습니다.
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')
RegExp 개체를 다음과 같은 대체 메서드에 전달할 수도 있습니다.
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
yourstring = '#please_an_information_pack_to_the_information_address:';
'#'을 '로 바꾸고 '_'를 공백으로 바꿉니다.
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
newstring2가 결과입니다.
아무것도 없는 경우 tckmn의 답변이 가장 좋습니다.
일치에 대응하는 특정 문자열로 치환할 필요가 있는 경우는, Voiceu 와 Christope 의 답변의 바리에이션을 참조해 주세요.이것에 의해, 일치하고 있는 문자열의 중복을 회피할 수 있기 때문에, 2 개의 장소에 새로운 일치를 추가할 필요가 없습니다.
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]);
이건 이디시랑 네쿠데스 같은 캐릭터에 잘 어울려요.
var string = "נׂקֹוַדֹּוֶת";
var string_norm = string.replace(/[ְֱֲֳִֵֶַָֹֹּׁׂ]/g, '');
document.getElementById("demo").innerHTML = (string_norm);
다음은 'reduce' 다중 치환 함수를 사용하는 "safe HTML" 함수입니다(이 함수는 각 치환을 문자열 전체에 적용하므로 치환 간의 의존성이 매우 높습니다).
// Test:
document.write(SafeHTML('<div>\n\
x</div>'));
function SafeHTML(str)
{
const replacements = [
{'&':'&'},
{'<':'<'},
{'>':'>'},
{'"':'"'},
{"'":'''},
{'`':'`'},
{'\n':'<br>'},
{' ':' '}
];
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);
}
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}'))
왜 아직 아무도 이 솔루션을 제안하지 않았는지 모르겠지만, 저는 이것이 꽤 잘 작동한다는 것을 알았습니다.
var string = '#Please send_an_information_pack_to_the_following_address:'
var placeholders = [
"_": " ",
"#": ""
]
for(var placeholder in placeholders){
while(string.indexOf(placeholder) > -1) {
string = string.replace(placeholder, placeholders[placeholder])
}
}
기능을 업데이트하지 않고도 원하는 플레이스 홀더로 추가할 수 있습니다.심플!
하나의 기능과 하나의 프로토타입 기능.
String.prototype.replaceAll = function (search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'gi'), replacement);
};
var map = {
'&': 'and ',
'[?]': '',
'/': '',
'#': '',
// '|': '#65 ',
// '[\]': '#66 ',
// '\\': '#67 ',
// '^': '#68 ',
'[?&]': ''
};
var map2 = [
{'&': 'and '},
{'[?]': ''},
{'/': ''},
{'#': ''},
{'[?&]': ''}
];
name = replaceAll2(name, map2);
name = replaceAll(name, map);
function replaceAll2(str, map) {
return replaceManyStr(map, str);
}
function replaceManyStr(replacements, str) {
return replacements.reduce((accum, t) => accum.replace(new RegExp(Object.keys(t)[0], 'g'), t[Object.keys(t)[0]]), str);
}
if other 스테이트먼트의 줄임말을 사용하면 어떻게 될까요? 원라이너로 만들 수 있습니다.
const betterWriting = string.replace(/[#_]/gi , d => d === '#' ? '' : ' ' );
언급URL : https://stackoverflow.com/questions/16576983/replace-multiple-characters-in-one-replace-call
'programing' 카테고리의 다른 글
Lodash와 Underscore.js의 차이점 (0) | 2022.11.17 |
---|---|
이클립스에서 선 삭제 (0) | 2022.11.17 |
JSONDecodeError: 예상 값: 1행 1열(char 0) (0) | 2022.11.17 |
MySQL의 CHECK 제약 조건이 작동하지 않습니다. (0) | 2022.11.17 |
GitHub에서 호스트되는 외부 JavaScript 파일 링크 및 실행 (0) | 2022.11.17 |