ProgramingTip

Javascript에서 '/'및 '/ g'내부의 변수로 많이에 대한 전역 대체를 수행해야할까요?

bestdevel 2020. 11. 12. 19:27
반응형

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 링크를 확인할 수 있습니다.

http://jsbin.com/nohuroboxa/edit?html,js,output

참고 URL : https://stackoverflow.com/questions/542232/in-javascript-how-can-i-perform-a-global-replace-on-string-with-a-variable-insi

반응형