[javascript] 정규식에서 변수를 어떻게 사용합니까?

String.replaceAll()JavaScript 로 메소드 를 만들고 싶습니다 . 정규식을 사용하는 것이 가장 간결한 방법이라고 생각합니다. 그러나 정규식에 변수를 전달하는 방법을 알 수 없습니다. 이 작업을 이미 수행하여의 모든 인스턴스를 "B"로 바꿀 수 있습니다 "A".

"ABABAB".replace(/B/g, "A");

그러나 나는 이런 식으로하고 싶다 :

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

그러나 분명히 이것은 텍스트 만 대체합니다 "replaceThis"… 그래서이 변수를 정규식 문자열에 어떻게 전달합니까?



답변

/regex/g구문 을 사용하는 대신 새 RegExp 객체를 생성 할 수 있습니다 .

var replace = "regex";
var re = new RegExp(replace,"g");

이런 식으로 정규식 객체를 동적으로 만들 수 있습니다. 그럼 당신은 할 것입니다 :

"mystring".replace(re, "newstring");


답변

Eric Wendelin이 언급했듯이 다음과 같이 할 수 있습니다.

str1 = "pattern"
var re = new RegExp(str1, "g");
"pattern matching .".replace(re, "regex");

이 결과 "regex matching ."입니다. 그러나 str1이 인 경우 실패합니다 ".". 당신은 결과를 ~로 "pattern matching regex"대체 할 것으로 기대 "regex"하지만, …

regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

이것은 "."문자열 이지만 RegExp 생성자에서 여전히 정규 표현식으로 해석되므로 줄 바꿈이 아닌 문자를 의미하며 문자열의 모든 문자를 의미합니다. 이를 위해 다음 기능이 유용 할 수 있습니다.

 RegExp.quote = function(str) {
     return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
 };

그럼 당신은 할 수 있습니다 :

str1 = "."
var re = new RegExp(RegExp.quote(str1), "g");
"pattern matching .".replace(re, "regex");

항복 "pattern matching regex".


답변

"ABABAB".replace(/B/g, "A");

항상 그렇듯이 : 필요하지 않으면 정규식을 사용하지 마십시오. 간단한 문자열 바꾸기의 경우 관용구는 다음과 같습니다.

'ABABAB'.split('B').join('A')

그러면 Gracenotes의 답변에서 언급 된 인용 문제에 대해 걱정할 필요가 없습니다.


답변

모든 어커런스 ( g) 를 얻으려면 대소 문자를 구분하지 않고 ( i) 경계를 사용하여 다른 단어 ( \\b) 내의 단어가되지 않도록 경계를 사용하십시오 .

re = new RegExp(`\\b${replaceThis}\\b`, 'gi');

예:

let inputString = "I'm John, or johnny, but I prefer john.";
let replaceThis = "John";
let re = new RegExp(`\\b${replaceThis}\\b`, 'gi');
console.log(inputString.replace(re, "Jack")); // I'm Jack, or johnny, but I prefer Jack.


답변

match 메소드 와 함께 변수를 사용하려는 사람 은 나를 위해 일했습니다.

var alpha = 'fig';
'food fight'.match(alpha + 'ht')[0]; // fight


답변

이:

var txt=new RegExp(pattern,attributes);

이것과 같습니다 :

var txt=/pattern/attributes;

http://www.w3schools.com/jsref/jsref_obj_regexp.asp를 참조 하십시오 .


답변

this.replace( new RegExp( replaceThis, 'g' ), withThis );