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 );