[javascript] Javascript Regex : 정규식 안에 변수를 넣는 방법?
예를 들어 :
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
그러나 이것은 물론 작동하지 않습니다 🙂 이것을 할 수있는 방법이 있습니까?
답변
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
최신 정보
의견의 일부 당, 당신이 할 수 있음에 유의해야 탈출 변수 (예 : 변수가 사용자의 입력에서 오는) 악의적 인 콘텐츠에 대한 가능성이있는 경우
ES6 업데이트
2019 년에는 일반적으로 템플릿 문자열을 사용하여 작성되며 위 코드가 업데이트되었습니다. 원래 답변은 다음과 같습니다.
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
답변
RegExp 객체를 사용할 수 있습니다.
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
그런 다음 regexstring
원하는 방식으로 구성 할 수 있습니다 .
답변
JavaScript의 변수에서 정규식을 작성하려면 RegExp
문자열 매개 변수와 함께 생성자 를 사용해야합니다 .
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
물론 이것은 매우 순진한 예입니다. input
정규 표현식에 대해 올바르게 이스케이프되었다고 가정합니다 . 사용자 입력을 다루거나 특수 문자를보다 편리하게 일치 시키려면 특수 문자를 이스케이프 처리 해야합니다 .
function regexEscape(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
input = regexEscape(input);
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
답변
es6 템플릿 리터럴 을 사용하는 경우 옵션입니다 …
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
답변
항상 정규 표현식을 문자열로 제공 할 수 있습니다 (예 🙂 "ReGeX" + testVar + "ReGeX"
. 문자열 내에서 일부 문자 (예 : 큰 따옴표)를 이스케이프해야 할 수도 있지만 대부분의 경우 동일합니다.
RegExp
생성자를 사용 하여 플래그를 전달할 수도 있습니다 ( docs 참조 ).
답변
다음 두 가지 방법 중 하나로 JS에서 정규 표현식을 작성할 수 있습니다.
- 정규 표현식 리터럴 사용-
/ab{2}/g
- 정규식 생성자 사용-
new RegExp("ab{2}", "g")
.
정규식 리터럴은 상수이며 변수와 함께 사용할 수 없습니다. 이것은 생성자를 사용하여 달성 할 수 있습니다. RegEx 생성자의 구조는 다음과 같습니다.
new RegExp(regularExpressionString, modifiersString)
regularExpressionString의 일부로 변수를 포함 할 수 있습니다. 예를 들어
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
이것은 패턴의 모양과 일치합니다 cdcdcd
.
답변
다음은 특정 문자로 래핑 된 값을 반환하는 매우 쓸모없는 함수입니다. 🙂
jsfiddle : https://jsfiddle.net/squadjot/43agwo6x/
function getValsWrappedIn(str,c1,c2){
var rg = new RegExp("(?<=\\"+c1+")(.*?)(?=\\"+c2+")","g");
return str.match(rg);
}
var exampleStr = "Something (5) or some time (19) or maybe a (thingy)";
var results = getValsWrappedIn(exampleStr,"(",")")
// Will return array ["5","19","thingy"]
console.log(results)