Javascript에서 '/'및 '/ g'내부의 변수로 많이에 대한 전역 대체를 수행해야할까요?
Javascript에서 String.replace를 사용하여 전역 교체를 수행하고 싶습니다.
문서에서 나는 내가 / g로 그들이 할 수있는 읽었다. 예를 들면;
var mystring = mystring.replace(/test/g, mystring);
그리고 이것은 mystring 내부의 모든 발생을 대체합니다. 따옴표에 없습니다.
하지만 변수 매개 변수가있는 경우 따옴표없이 어떻게 할 수 있습니까?
나는 다음과 같은 것을 시도했다.
var stringToFind = "test";
// 첫 시도
mystring = mystring.replace('/' + stringToFind + '/g', mystring);
// 두 번째 시도, 전혀 의미가 없음
mystring = mystring.replace(/stringToFind/g, mystring);
그러나 그들은 작동하지 않습니다. 어떤 아이디어?
prototype.js를 사용할 수 있습니까? 모든 String.gsub를 사용할 수 있습니다.
var myStr = "a day in a life of a thing";
var replace = "a";
var resultString = myStr.gsub(replace, "g");
// resultString will be "g day in g life of g thing"
또한 정규식을 사용합니다. 나에게 그것을 그것을 해결하는 더 우아한 방법 중 하나입니다. prototypejs gsub 문서
var mystring = "hello world test world";
var find = "world";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "yay")); // alerts "hello yay test yay"
이 기능이 필요한 경우
replaceGlobally(original, searchTxt, replaceTxt) {
const regex = new RegExp(searchTxt, 'g');
return original.replace(regex, replaceTxt) ;
}
정규식의 경우 new RegExp(stringtofind, 'g');
. 그러나. '찾기'에 정규식에서 특수한 문자가 포함되어 있으면 정규식 의미를 사용합니다. 따라서 '.'를 바꾸려고하면 ' abc.def '에서 'x'를 사용하면 'xxxxxxx'가 표시됩니다.
간단한 대체 만 원하는 경우 정규식이 필요하지 않습니다! 다음은 일반 교체 교체 관용구입니다.
mystring= mystring.split(stringtofind).join(replacementstring);
정규식은보다 훨씬 느립니다. 따라서 이스케이프 된 검색된 것입니다. 미리 사용하는 것이 좋습니다.
다음은 빠른 전역 전역 교체를 수행하는 빠른 방법입니다.
sMyString.split(sSearch).join(sReplace);
그리고 그게 다야.
String.prototype.replaceAll = function (replaceThis, withThis) {
var re = new RegExp(RegExp.quote(replaceThis),"g");
return this.replace(re, withThis);
};
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};
var aa = "qwerr.erer".replaceAll(".","A");
alert(aa);
그것은 이미 아닌 정규식입니다. RegExp 개체를 생성하여 사용하여 정규식을 동적으로 만듭니다.
var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');
시험 :
var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
다음 솔루션을 사용하여 '/'및 '/ g'내부의 변수가있는 문자열에서 전역 대체를 수행 할 수 있습니다.
myString.replace(new RegExp(strFind, 'g'), strReplace);
변수를 보간하려면 RegExp 개체를 사용해야합니다.
https://developer.mozilla.org/en/Core_Javascript1.5_Guide/Regular_Expressions
예:
var str = "This is my name";
var replace = "i";
var re = new RegExp(replace, 'g')
str = str.replace(re, 'p');
alert(str);
동적 전역 교체
나는 여기에 대답하지 않은 약간 더 복잡한 해결책을 찾기 위해이 스레드에 왔습니다. 이제 답을 찾았으므로 다른 사람이 유용하다고 생각할 경우 게시 할 것입니다.
대체 문자열이 원래 일치를 기반으로하는 동적 전역 대체를 수행하고 싶었습니다.
예를 들어 모든 단어의 첫 글자를 대문자로 바꾸려면 (예 : "cat sat mat"를 "Cat Sat Mat"로) 전역 찾기 바꾸기를 사용합니다. 방법은 다음과 같습니다.
function capitaliseWords(aString) {
// Global match for lowercase letters following a word boundary
var letters = aString.match(/\b[a-z]/g), i, letterMatch;
// Loop over all matched letters
for( i = 0; i < letters.length; i++ ) {
// Replace the matched letters with upper case versions
letterMatch = new RegExp('\\b'+letters[i]); // EDIT - slight fix
aString = aString.replace(letterMatch, letters[i].toUpperCase());
}
// Return our newly capitalised string
return aString;
}
alert( capitaliseWords("cat sat mat") ); // Alerts "Cat Sat Mat"
다음 방법을 사용하여 할 수 있습니다
이 기능을 참조하십시오 :
function SetValue()
{
var txt1='This is a blacK table with BLack pen with bLack lady';
alert(txt1);
var txt2= txt1.replace(/black/gi,'green');
alert(txt2);
}
통사론:
/ search_string / {g | gi}
어디
- g는 대소 문자를 구분하는 전역 대체입니다.
- gi는 blobal 대소 문자를 구분하지 않는 대체입니다.
이 JSBIN 링크를 확인할 수 있습니다.
'ProgramingTip' 카테고리의 다른 글
오류 : Windows에서 파일 경로가 너무 깁니다. 240 자색으로 유지하십시오. (0) | 2020.11.12 |
---|---|
PHP 배열의 각 항목에 접두사 추가 (0) | 2020.11.12 |
Java / Android color int의 알파 바이트 조작 (0) | 2020.11.12 |
UITextview의 줄 수 제한 (0) | 2020.11.12 |
iOS에서 작동하지 않는 jQuery 클릭 이벤트 (0) | 2020.11.12 |